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

sri*_*enu 5 c++

无法直接为引用变量分配整数值,例如:

int &x=10; //not possible
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以修改此语句以使其成为可能?

但不是这样的:

int a=10;int &x=a;
Run Code Online (Sandbox Code Playgroud)

这很好用.但我想要一些其他方式或修改我的表达并让它工作!

Kar*_*ath 6

名称上的引用必须引用某些内容.如果它没有引用任何东西,你想如何为它赋值?


das*_*ndy 4

它不起作用的原因是因为 10 是“const int”类型。您可以将其转换为引用,但至少不能在不违反某些逻辑的情况下将其设为非常量。

const int &a = 10;
Run Code Online (Sandbox Code Playgroud)

那会起作用的。

int &b = const_cast<int &>(static_cast<const int &>(10));
Run Code Online (Sandbox Code Playgroud)

也将编译,但您不能修改 b (因为这意味着修改实际的“10”值)。

  • “而且,它会编译。” - 不在 GCC 中,不在 Comeau 中,不符合 C++03 标准(5.2.11 中的任何规则都不允许通过 `const_cast` 将右值转换为引用类型)。YMMV。 (3认同)
  • 标准在哪里说了这一切?AFAIK 没有要求将整数文字放置在只读数据中,即使对它们进行常量引用也是如此。该实现完全有权将它们粘贴在堆栈上,然后将堆栈重新用于其他用途。临时的生命周期本质上并不是扩展到块的末尾,而是扩展到它所绑定的引用的生命周期,在您的“f”情况下是块,但在我的两次强制转换情况下仍然只是陈述。 (2认同)
  • 来自 n3242, 2.14.2 [lex.icon] “2. 整数文字的类型是表 6 中可以表示其值的相应列表中的第一个。” 表中列出的类型都不是“const”限定的。整数文字是类型的纯右值,例如“int”,而不是“const int”。(史蒂夫所说的也与该代码的错误程度密切相关。) (2认同)