#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。
答案 0 :(得分:5)
表达式 "Hello, World!" + number
是添加到const char[]
的{{1}}字面值。前者衰减为int
指针,并通过指针算术向其添加const char*
。
由于最后一个指针不在原始字符串常量中,因此您将一个无效的number
指针传递给const char*
构造函数,并且程序的行为未定义。 Anything 可能会在此时发生,包括运行时崩溃。积极优化的编译器可能会完全省略未定义的表达式;越来越普遍了。
如果您想将 std::string
连接到字符串,那么您可以编写
900