c++ - 用自身初始化字符串 (C++)

标签 c++ string

下面的代码在 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/

相关文章:

python - Python 中字符串中的字符

java - next() 和 next().CharAt(0); 之间的区别

python - 如何在 Python 3 中异或两个十六进制字符串?

c++ - 尾随返回类型中的占位符是否会覆盖初始占位符?

c++ - 关于如何在基于动态数组的结构中存储键值对的想法

c++ - 多个文件合二为一

c# - 为什么在使用 C# 从数据库中获取文本时得到的是文字\r 和\n?

string - 如何在Elixir字符串中双引号嵌入?

c++ - static_assert 如果表达式是 constexpr

c++ - C++中的Web访问身份验证?