11 int a = 5; const int b = a, c = 4; int e[a]; int d[b]; int f[c]; 的定义f[c]有效。 变量b也是恒定的int,但是编译器给我的错误“表达必须有一个恒定的值”为线int d[b]。b和之间有什么区别c? c++ — 奥利弗·尚 source
16 b和c有什么区别? c有一个编译时间常数初始化器,而b没有。具有编译时间常数初始化程序的const对象本身就是一个编译时间常数值。 由于我可以使用常量定义一个长度的长度,所以为什么不这样做呢? 不仅任何常数都可以。const限定符表示运行时常量(即,该值可以在运行时确定,但在对象的整个生命周期中都不会改变)。只有编译时间常数值可以用作数组大小。 — 埃雷里卡 source
4 编译器诊断程序实际上应该是编译时可评估的常量表达式。 由于b分配给它的原始对象不是const,b不是可在编译时评估的常量表达式,所以编译将失败,因为标准C ++不支持可变长度数组。 — 拔示巴 source
1 “ const”仅表示变量在运行时不会更改,并不意味着可以在编译时推导出其值。 我猜您正在寻找的是“ constexpr”。也许您可以这样尝试: constexpr int b = 4; // can't be assigned from a! int d[b]; 相反,由于某些历史原因,“ constexpr”表示“真实const”,而“ const”仅表示“不变var”。必须记住,c ++中的本机数组始终是固定长度的,如@Bathsheba所说。 — 里昂 source 您在说什么“其他语言”? — 布赖恩 1 @Brian对不起,这无关紧要。我改变了答案。 — 里昂, “没有真正的苏格兰人……”-让我不同意您的“ constexpr”,它表示“真实const”,而“ const”仅表示“不变var”语句。“ const”表示“ const”,“ constexpr”表示“ constexpr”-在c ++语言的上下文中,它们具有两种不同的含义和含义。“ const”表示“无法修改对象”,“ constexpr”表示“可以在编译时评估函数或变量的值” — CharonX 对不起,也许我说错了。英语不是我的母语。 — 里昂,
1 术语“常量”确实是模棱两可的,关键字const具有误导性。 const表示:“不允许在初始化后更改此对象的值”。它并不意味着“编译时间常数”。它的初始值仍然可以(通常是)仍然来自运行时源。 您需要一个数组边界的编译时常量。 有时可以有一个名为对象foo即编译时间常数,如果是const 和它是从一个常量表达式初始化,像文字或constexpr东西。是这样的c;事实并非如此b。 — 轨道轻赛 source