字符和int连接何时导致seg错误?

时间:2018-03-13 08:44:10

标签: c++

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int number = 900;
    cout << std::string("Hello, World!" + number) << std::endl;
    return 0;
}

我知道正确的解决方案是使用std::to_string(number)。但问题是,为什么我没有得到分段错误?我甚至通过valgrind来运行它。字符串长度约为13,我移动指针900。

1 个答案:

答案 0 :(得分:5)

表达式 "Hello, World!" + number是添加到const char[]的{​​{1}}字面值。前者衰减为int指针,并通过指针算术向其添加const char*

由于最后一个指针不在原始字符串常量中,因此您将一个无效的number指针传递给const char*构造函数,并且程序的行为未定义。 Anything 可能会在此时发生,包括运行时崩溃。积极优化的编译器可能会完全省略未定义的表达式;越来越普遍了。

轰!

如果您想 std::string连接到字符串,那么您可以编写

900