下面的代码在 Linux (g++ 4.8.4) 和 Windows (VS Express 2013) 上编译,但在执行时产生不同的结果。
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
string str = str;
cout << "'str.length()': "
<< str.length() << endl;
return 0;
}
在 Linux 上我得到:
'str.length()': 140187593065792
在 Windows 上我得到:
'str.length()': 0
此外,如果我如下所示更改初始化语句,那么它会符合要求,但会在运行时崩溃(在 Linux 上,我得到:在抛出“std::bad_alloc”实例后调用终止):
string str = str + str;
我知道,在这两种情况下,这都不是初始化字符串变量的常用方法。但是,有人可以解释一下这段代码到底出了什么问题吗?另外,为什么第一种情况的输出不同?
最佳答案
当初始化器被评估时,str
已经被声明但是它还没有以任何方式构造。它的“值(value)”是完全不确定的。你的程序有未定义的行为。
关于c++ - 用自身初始化字符串 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35974226/