c++ - 元组 std::get() 不适用于变量定义的常量

标签 c++ constants type-conversion

我遇到了以下问题:

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/

相关文章:

c++ - 如何保存24位BMP

c++ - 将 FFmpeg AVFrame 渲染为 OpenGL 纹理?

c++ - 什么是快速提升无符号整型元素数组大小的方法?

C# - 将 List<JToken> 转换为 List<string> 单行

entity-framework - EF 在运行时从 Type 获取 dbset 名称

c++ - boost 变体对常用方法的简单调用

c++无法输出unicode字符,即使我可以直接编写它们

c - volatile 和 const 指针

作为枚举/常量的 php 方法参数

c - 将大型 const 结构传递给函数