c++ - 当数组声明为 constexpr 时,为什么我不能使用整数变量作为数组键?
问题描述
由于我不明白的原因,我可以constexpr
使用硬编码的整数文字作为索引访问数组的成员,但是一旦我尝试使用整数变量,它就无法编译并出现错误undefined reference
。但是aIvoryKeys
在范围内,我们可以通过硬编码值看到这一点。
class KeyboardKey{
public:
static constexpr unsigned short int aIvoryKeys[] {0,2,4,5,7,9,11};
void ShowIvory(){
// Hardcoded values work:
std::cout << "aIvoryKeys " << aIvoryKeys[0] << std::endl; // 0
std::cout << "aIvoryKeys " << aIvoryKeys[1] << std::endl; // 2
std::cout << "aIvoryKeys " << aIvoryKeys[2] << std::endl; // 4
// FAILS: undefined reference to `KeyboardKey::aIvoryKeys'
int j = 2;
std::cout << "aIvoryKeys " << aIvoryKeys[j] << std::endl;
// FAILS: undefined reference to `KeyboardKey::aIvoryKeys'
for(int i=0;i<std::size(aIvoryKeys);++i){
std::cout << "aIvoryKeys " << aIvoryKeys[i] << std::endl;
}
}
};
如果static constexpr
从声明中删除,它将编译并运行。
问题是,为什么声明一个数组static constexpr
似乎会阻止使用局部变量来访问它的成员?该变量是函数的本地变量,不需要任何运行时信息。无论如何,一个constexpr
数组应该可以在运行时访问(它只是不会改变)。
解决方案
推荐阅读
- snowflake-cloud-data-platform - 在将 csv 文件从 s3 加载到雪花时使用模式
- emacs - 如何防止emacs公司模式下班级成员访问算子后自动弹出自动补全窗口?
- python-3.x - 具有离散颜色网格的离散颜色条
- python - 从 matplotlib 箱线图中获取中值
- sql - psql 没有使用正确的索引进行选择查询?
- python - 如何在 Python 的子列表中合并连续的字符串项?
- c# - 通过 c# 测试该计算机是否具有正常运行的 dns 服务器
- spring-boot - 如何通过多对多关系找到与第一个实体相关的另一个实体的值列表的实体?
- pytest - 如何模拟 GerritRestAPI 调用并在 pytest 上使用它?
- flutter - 如何弯曲/弯曲 Flutter 小部件?(非仿射小部件渲染变换)