下面的代码在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;
}
Run Code Online (Sandbox Code Playgroud)
在Linux上我得到:
'str.length()': 140187593065792
Run Code Online (Sandbox Code Playgroud)
在Windows上,我得到:
'str.length()': 0
Run Code Online (Sandbox Code Playgroud)
另外,如果我更改了如下所示的初始化语句,那么它符合但它在运行时崩溃(在Linux上我得到:在抛出'std :: bad_alloc'的实例后调用terminate):
string str = str + str;
Run Code Online (Sandbox Code Playgroud)
我理解,在这两种情况下,这不是初始化字符串变量的常用方法.但是,有人可以解释这段代码的真正错误吗?另外,为什么第一种情况下输出不同?