我遇到了以下问题:
std::tuple<Ts...> some_tuple = std::tuple<Ts...>();
for (int i = 0; i < 2; i++) {
const int j = i;
std::get<j>(temp_row) = some_value;
}
不编译:(在 xcode 中)它说“'get' 没有匹配的函数调用”。
但是,以下工作正常:
std::tuple<Ts...> some_tuple = std::tuple<Ts...>();
for (int i = 0; i < 2; i++) {
const int j = 1;
std::get<j>(temp_row) = some_value;
}
这与将常量的值定义为变量的值有什么关系吗?
谢谢!
编辑:区别在于 const int j = i;
与 const int j = 1;
最佳答案
这里的问题是 C++ 有两种不同的常量。有编译时常量和运行时常量。编译时常量是在编译时已知的常量,并且是唯一可以在模板中使用或用作数组大小的有效常量。运行时常量是一个无法更改的值,但该值是直到运行时才知道的值。这些常量不能用作模板或数组大小的值。所以在
std::tuple<Ts...> some_tuple = std::tuple<Ts...>();
for (int i = 0; i < 2; i++) {
const int j = i;
std::get<j>(temp_row) = some_value;
}
i
是一个运行时值,它使 j
成为运行时常量,您不能用它实例化模板。然而在
std::tuple<Ts...> some_tuple = std::tuple<Ts...>();
for (int i = 0; i < 2; i++) {
const int j = 1;
std::get<j>(temp_row) = some_value;
}
const int j = 1;
是编译时常量,可用于实例化模板,因为它的值在编译时已知。
关于c++ - 元组 std::get() 不适用于变量定义的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43233894/