字面量通常是prvalue
。
字符串是一种特殊情况,被定义为char
数组(意味着lvalue
)。
这个问题特别涉及到非字符串字面量。
为什么非字符串字面量不是const
?
foo(42); // passes foo an `int`, not a `const int`.
非字符串常量是无法被修改的,因此将其设为const
是很有意义的,不是吗?
字面量通常是prvalue
。
字符串是一种特殊情况,被定义为char
数组(意味着lvalue
)。
这个问题特别涉及到非字符串字面量。
为什么非字符串字面量不是const
?
foo(42); // passes foo an `int`, not a `const int`.
非字符串常量是无法被修改的,因此将其设为const
是很有意义的,不是吗?
void foo(int&);
foo(42); // error
相比于将 42
定义为 const
,该语言将左值引用定义为不允许绑定到右值。
const
呢? - Ivan Rubinson42 = 5
吗?既然数字字面量本质上已经是常量,所以没有必要将它们变成常量。一旦你将数字字面量存储在变量中,你就有了一个副本,这个副本可以随意修改,因为它不再是原始的字面值。 - Some programmer dudeconst
,那为什么不是 const
呢? - Ivan Rubinson
void foo(const int)
与void foo(int)
相同)。那么它会有什么区别呢? - Uselessdecltype(42)
。你能详细说明一下它会带来什么吗? - Angew is no longer proud of SOconst
添加到字符串字面量的类型中,使它们在静态上不可修改。其他字面量一开始就是静态不可修改的,因此没有人觉得有必要将它们设为const
。 - n. m.