我们可以为参考变量分配一个整数值吗?

时间:2011-07-15 08:49:59

标签: c++

不可能直接为引用变量赋值,例如:

int &x=10; //not possible

我们是否可以通过其他方式修改此声明以使其成为可能?

但不是这样的:

int a=10;int &x=a;

这很好用。但是我想要一些其他方式或者修改一下我的表达并让它起作用!

6 个答案:

答案 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)

您无法将引用与非对象绑定到任何不可变的内容。

  • 标准允许在ROM中存储编译时常量(顺便说一句,尝试修改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; (右值参考),但这可以用作函数参数。