C++ 字符和整数串联何时会导致seg错误? #包括 #包括 使用名称空间std; int main() { 整数=900; cout

C++ 字符和整数串联何时会导致seg错误? #包括 #包括 使用名称空间std; int main() { 整数=900; cout,c++,C++,表达式“Hello,World!”+number是添加到int的const char[]文本。前者衰减为const char*指针,然后通过指针算术向其添加number 由于最后一个指针不在原始字符串常量中,因此您正在向std::string构造函数传递无效的const char*指针,并且程序的行为未定义。此时可能发生任何情况,包括运行时崩溃。积极优化的编译器可能会忽略未定义的表达式总的来说,这种情况越来越普遍 繁荣 如果要将900连接到字符串,则可以编写 #include <iostr

表达式
“Hello,World!”+number
是添加到
int
const char[]
文本。前者衰减为
const char*
指针,然后通过指针算术向其添加
number

由于最后一个指针不在原始字符串常量中,因此您正在向
std::string
构造函数传递无效的
const char*
指针,并且程序的行为未定义。此时可能发生任何情况,包括运行时崩溃。积极优化的编译器可能会忽略未定义的表达式总的来说,这种情况越来越普遍

繁荣 如果要将
900
连接到字符串,则可以编写

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int number = 900;
    cout << std::string("Hello, World!" + number) << std::endl;
    return 0;
}
std::cout表达式
“你好,世界!”+number
是添加到
int
const-char[]
文本。前者衰减为
const-char*
指针,通过指针算术向其添加
number

由于最后一个指针不在原始字符串常量中,因此您正在向
std::string
构造函数传递无效的
const char*
指针,并且程序的行为未定义。此时可能发生任何情况,包括运行时崩溃。积极优化的编译器可能会忽略未定义的表达式总的来说,这种情况越来越普遍

繁荣 如果要将
900
连接到字符串,则可以编写

#include <iostream>
#include <string>

using namespace std;

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

std::cout Undefined behavior is Undefined请参考一些文档,我想进一步阅读。“字符串长度约为13,我移动指针900”所以你知道你在做什么。为什么你希望在你现在指向的内存中随机位置有什么有用的东西?-不确定你期望的是什么样的文档。未定义的行为意味着当你运行程序C++时,你不能保证会发生什么。arantees a segmentation fault-单词甚至没有出现在iTunes中定义的行为是未定义的。您可以参考一些文档吗?请,我想进一步阅读。“字符串长度约为13,我将指针移动了900”所以你知道你在做什么。为什么你希望在你现在指向的内存中随机位置有什么有用的东西?-不确定你期望的是什么样的文档。未定义的行为意味着当你运行程序C++时,你不能保证会发生什么。arantees是一个分割错误-单词甚至没有出现在盒子里……OP没有繁荣。这似乎是他们困惑的根源。@讲故事者:我在我的盒子上试过,我的猫现在不见了。OP的猫仍然在盒子里。你们所有人现在都应该更清楚了:P,但说真的。我想再多说几句关于缺少瓜拉的话UB中固有的NTEE将使这成为正确的答案。好吧……OP不是繁荣。这似乎是他们困惑的根源。@说书人:我在我的盒子上试过了,我的猫现在不见了。OP的猫仍然在盒子里。你们现在应该更清楚了:P,但说真的。我想再多说几句关于她缺乏保证的话UB中的ent将使这成为正确的答案。