#include <iostream>
#include <string>
using namespace std;
int main()
{
int number = 900;
cout << std::string("Hello, World!" + number) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道正确的解决方案是使用std::to_string(number).但问题是,为什么我没有得到分段错误?我甚至通过valgrind来运行它.字符串长度约为13,我移动指针900.
该表达式 "Hello, World!" + number是一个const char[]文字加入到int.前者衰减到一个const char*指针,你number通过指针算法添加它.
由于该最终指针不在原始字符串常量中,因此您将无效const char*指针传递给std::string构造函数,并且程序的行为未定义.此时可能发生任何事情,包括运行时崩溃.积极优化的编译器可能会完全省略未定义的表达式; 越来越普遍了.
如果你想连接 900到字符串,那么你可以写
std::cout << std::string("Hello, World!" + std::to_string(number)) << std::endl;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |