C++ 为什么可以将整数添加到字符串文字中?

C++ 为什么可以将整数添加到字符串文字中?,c++,C++,我在胡闹,注意到了一些奇怪的事情。实际上,您可以执行a+2,程序可以很好地编译,但不会输出任何内容。但是+32表示数组下标高于数组边界 a实际上是一个const char[],但它是or,当您对指针进行数学运算时,它的工作方式类似于数组下标语法。因此,您正在创建一个新指针,它位于字符串中更远的位置。这种基于指针的算法可能很有用。如果您确实获得了对文本的char*引用,根据经验修改它仍然是未定义的。如果在只读页面中,它可能会崩溃,或者可能会更改使用它的所有引用。提示:大小为2a+2的is char

我在胡闹,注意到了一些奇怪的事情。实际上,您可以执行a+2,程序可以很好地编译,但不会输出任何内容。但是+32表示数组下标高于数组边界

a实际上是一个const char[],但它是or,当您对指针进行数学运算时,它的工作方式类似于数组下标语法。因此,您正在创建一个新指针,它位于字符串中更远的位置。这种基于指针的算法可能很有用。如果您确实获得了对文本的char*引用,根据经验修改它仍然是未定义的。如果在只读页面中,它可能会崩溃,或者可能会更改使用它的所有引用。

提示:大小为2a+2的is char数组也超出了范围。。。a[0]持有“a”,a[1]持有NUL,仅此而已。尝试输出a+2有未定义的行为。这是否回答了您的问题?a实际上是常量字符*-不,不是。。。它是一个const char[],在必要时进行隐式标准转换为const char*。我很难说,因为MDSN引用只显示对char*的赋值,但有很多问题说它是一个const char[]但由于MSDN引用显示了对char*的赋值,所以对于字符串文本是否为const存在一些混淆。但我认为很明显,数组可以分配给const char*或char*引用,如果它是char*,就不应该修改它。我将编辑我的帖子。非常量字符*的赋值在C++98中被弃用,在C++11中被删除。。。很长一段时间以来,可写字符串文字实际上被认为是一种合理的编译器实现选择,因此,即使是编译为ok的C++11之前的代码,如果实际尝试写入字符串文字,也可能会崩溃。另外,值得注意的是,模板void fconst char&a[N]{std::cout