我不能在函数中使用constexpr值,而不是函数的外部。
auto ar1 = std::array<int, il.size()>();的作用域中使用il。{ return std::array<T, il.size()>();}中使用constexpr-function il_to_array()为什么我不能在函数中使用constexpr值,但是我可以在这个值的块范围内这样做?
http://ideone.com/5g0iRE
#include <iostream>
#include <initializer_list>
#include <array>
constexpr size_t size_to_size(size_t v) { return v; } // 1 - OK
template<typename T>
constexpr size_t il_to_size(std::initializer_list<T> il) { return il.size(); } // 2 - OK
// 3 - error
template<typename T>
constexpr auto il_to_array(std::initializer_list<T> il) {return std::array<T, il.size()>();}
template<size_t N>
void print_constexpr() { std::cout << N << std::endl; }
int main() {
constexpr std::initializer_list<int> il = { 1, 2, 3 };
print_constexpr<il.size()>(); // 0 - OK
print_constexpr< size_to_size(il.size()) >(); // 1 - OK
print_constexpr< il_to_size(il) >(); // 2 - OK
auto ar1 = std::array<int, il.size()>(); // OK - body of function: il_to_array()
//auto ar2 = il_to_array(il); // 3 - error
return 0;
}例如,我们在这里看到,这个模板--无论是constexpr还是非为什么C++编译器可以将一个函数声明为constexpr,而这个函数不能是constexpr呢? --都不会失败,因为其中一个例子可能是constexpr:为什么C++编译器可以将一个函数声明为constexpr,而这个函数不能是constexpr呢?。
constexpr和非constexpr。constexpr-arguments,那么只实例化constexpr-instance,而非constexpr-function不能被实例化并不重要。发布于 2016-08-13 21:22:57
函数的参数不是constexpr。
constexpr函数可能是在编译时不知道的参数。
因此,无论在编译时是否知道v,下面都是有效的
constexpr size_t size_to_size(size_t v) { return v; }但是以下函数不起作用,因为il不是constexpr,非类型模板参数需要在编译时知道:
template<typename T>
constexpr auto il_to_array(std::initializer_list<T> il) {return std::array<T, il.size()>();}即使函数只使用编译时已知的参数调用,也是如此。
https://stackoverflow.com/questions/38936809
复制相似问题