不可能直接为引用变量赋值,例如:
int &x=10; //not possible
我们是否可以通过其他方式修改此声明以使其成为可能?
但不是这样的:
int a=10;int &x=a;
这很好用。但是我想要一些其他方式或者修改一下我的表达并让它起作用!
答案 0 :(得分:6)
作为名称的引用必须引用某些内容。如果它没有引用任何内容,你想如何为它赋值?
答案 1 :(得分:4)
关键是10
是一个常数 - 有点明显:你不能改变它的价值。但是,如果您尝试将其分配给int
引用,则表示该值可以修改:int&
是可修改的值。
要使您的陈述有效,您可以使用const
参考:
int const& x = 10;
但正如“cnicutar”在评论中提到的那样,这是无用的;只需将10
分配给普通int
。
答案 2 :(得分:3)
它不起作用的原因是因为10是“const int”类型。你可以把它变成一个引用,但是你不能在不违反某些逻辑的情况下使它成为非const。
const int &a = 10;
那会起作用。
int &b = const_cast<int &>(static_cast<const int &>(10));
也会编译,但你不能修改b(因为这意味着修改实际的“10”值)。
答案 3 :(得分:2)
您无法将引用与非对象绑定到任何不可变的内容。
const_cast<>
编译时常量会产生未定义的行为)const
,即使const
是不可见的,因此也会颠覆整个const-correctness-thing 但是,你可以将一个引用绑定到几乎所有东西,包括临时代码:
将此视为“功能”。
答案 4 :(得分:2)
引用引用对象(可能是临时对象),而不是值。如果要在某处存储值,请将其分配给对象,而不是引用。
作为一种特殊情况,const int &a = 10;
初始化引用a
以引用值为10的临时对象,和它将该临时对象的生命周期延长到最后a
(12.2 / 5)的范围。这对于整数文字来说是无用的,但偶尔会对类类型的对象有用。不过,这确实不为引用分配整数值。它创建一个临时的,并绑定对临时的引用。
答案 5 :(得分:1)
在C ++ 0x中,你可以使用int&amp;&amp; (右值参考),但这可以用作函数参数。