谁能告诉我为什么 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/