任何人都可以告诉我为什么visual studio c ++编译器不允许我这样做:
string& s = "abc";
但我可以这样做:
string& s = string("abc");
当我尝试在linux上编译第二个例子时,g ++编译器实际上抛出了一个错误,这正是我所期望的。快速谷歌搜索告诉我,在第二种情况下,临时变量的生命周期延长到参考的生命周期,但话又说回来,第一个例子有什么问题以及为什么g ++抱怨它?
答案 0 :(得分:4)
这有一个简单的原因。 MSVC有缺陷。众所周知的bug(他们更喜欢称之为功能)允许int i& = int(5);
编译。它不应该。
正确的代码:
int main() {
const int& i = 5;
const int& j = int(5);
}
如您所见,当您正确使用const引用时,两个版本都可以正常工作。至于虽然MSVC允许一个不正确的版本,并且不允许另一个 - 这只是一个bug,并且问'为什么bug以某种方式行为'是相当没有实际意义的。
但是,如果你必须推理错误:),那么允许int& i = 5
允许你编写类似i = 10;
的内容,有效地改变整个程序中的5个含义。