【发布时间】:2009-02-03 09:01:05
【问题描述】:
在某些文本中,我们不能将常量值分配给引用变量。当我执行这样的程序时,我可以做到。有没有什么条件不能给引用变量赋值?
【问题讨论】:
-
你能发布一些示例代码吗?我认为如果没有可参考的代码,读者可能难以理解您的描述。
标签: c++
在某些文本中,我们不能将常量值分配给引用变量。当我执行这样的程序时,我可以做到。有没有什么条件不能给引用变量赋值?
【问题讨论】:
标签: c++
您可以初始化对常量值的常量引用。
const int &i = 12;
如果引用不是 const,则会出现编译器错误。
int &i = 12; //compiler error
常量值(例如文字)(大部分时间)存储在内存的只读段中。因此,您不能使用非常量引用来引用它们,因为这意味着您可以修改它们。
【讨论】:
您不能将常量值分配给非常量引用,就像您不能将常量值的地址分配给指向非常量值的指针一样。
至少,不是没有 const_cast。
编辑:如果您实际上指的是文字值,那么 Luc 的答案是更好的答案。我指的是 const 变量,而不是文字。
【讨论】:
您可能对“初始化”和“赋值”之间的区别有些困惑。这些在 C++ 中是不同的,理解差异对于理解语言至关重要。忽略参考:
int x = 1; // initialisation
x = 1; // assignment
只能初始化引用
int & r = x; // initialisation
r = 2; // assigns 2 to x _not_ to r
无法重新初始化引用。
关于您的问题,就 const 而言,您可以使用 const 值初始化 const 引用:
const int & r2 = 42;
【讨论】: