C++ 将字符串文字添加到字 rune 字

标签 c++ string concatenation

我对 C++ 中的字符串连接有疑问。

string str = "ab" + 'c';
cout << str << endl;

char ch = 'c';
string str1 = "ab";
string str2 = str1 + ch;
cout << str2 << endl;

代码产生:

ed before SaveGraphicsState
abc

谁能解释一下这一行的处理过程:string str = "ab"+ 'c'; ?

最佳答案

您对第一行的想法是正确的,这正是正在发生的事情。

对于像 "ab" 这样的文字字符串,没有任何默认的 + 运算符,所以编译器会采用它(作为 C 风格的字符串)并使用指向文字的 const char* 指针。然后它获取您的文字字符 'c' 并将其提升为具有某些值的 int。然后将此 int 添加到文字的地址并用作 C 字符串。由于您已经超出了为您的文字字符串分配的空间,因此结果是未定义的,它只是打印出结果地址中的字符,直到它找到一个空值。

如果你想一次创建字符串,你可以帮助编译器弄清楚你想先转换为 string 并进行强制转换:std::string str = std::string("ab") + 'c';.或者(如在单独的评论中看到的那样)通过串联来实现,这可能会或可能不会表现得更好。使用在您的情况下看起来更清楚的那个:std::string str = "ab"; str += 'c';.

在第二种情况下,您已经创建了一个 string 并且 string 有一个重载的 operator+ 可以进行直观的连接。

关于C++ 将字符串文字添加到字 rune 字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5705956/

相关文章:

c++ - MySQL 从两个表的 UNION 创建表

c++ - 通过具有模板专长的基类以const方法调整本地容器的大小

c++ - 错误 : no match for ‘operator*’ (operand type is ‘const llvm::DataLayout’ )

java - 在 Java 中比较 String 时是否需要检查 null 和 ""?

string - Julia 中不区分大小写的字符串比较

c++ - 如何通过更好的抽象来避免 typeid?

javascript - 在清除的字符串中异步连接点击的数字

python - 连接具有不同第一维的二维数组

arrays - 如何在 MATLAB 中合并结构体/结构体数组?

arrays - 垂直和水平连接 numpy 数组