c++ - 延长临时物体的使用生命周期

标签 c++ reference

谁能告诉我为什么 Visual Studio C++ 编译器不允许我这样做:

string& s = "abc";

但我可以做到:

string& s = string("abc");

当我尝试在 Linux 上编译第二个示例时,g++ 编译器实际上抛出了一个错误,这正是我所期望的。快速谷歌搜索告诉我,在第二种情况下,临时变量的生命周期延长到引用的生命周期,但话又说回来,第一个例子有什么问题,为什么 g++ 会提示它?

最佳答案

原因很简单。 MSVC 是有缺陷的。众所周知的错误(他们更喜欢称之为功能)允许 int i& = int(5); 进行编译。不应该。

正确的代码:

int main() {
  const int& i = 5;
  const int& j = int(5);
}

如您所见,当您正确使用 const 引用时,两个版本都可以正常工作。至于 MSVC 允许一个不正确的版本,而不允许另一个版本 - 这只是一个错误,询问“为什么该错误以某种方式运行”是相当没有意义的。

但是,如果您必须推理错误:),允许 int& i = 5 稍后将允许您编写类似 i = 10; 的内容,有效地更改 5 的含义在整个计划内。

关于c++ - 延长临时物体的使用生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33127841/

相关文章:

c++ - typedef 如何用于函数指针

c++ - 'asm' 中的操作数约束不一致

C++:使用复数共轭设置/获取数组值的代理

PHP - 通过引用传递可变数量的参数

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?

c++ - 如何用位运算代替取模和除法运算?

C++ 模板用法 : change variable place leads to compilation error

perl 不能使用字符串作为数组引用

java - 为什么 Java 会更新多个具有相同值的变量?

c++ - 构造函数中的引用初始化问题