连接字符串文字
在 Accelerated C 中,Koenig 引入了使用 " " 运算符连接字符串的功能。虽然这适用于字符串和字符串文字的组合,但在尝试连接多个字符串文字时会引发问题。
理解问题
考虑以下示例:
const string hello = "Hello"; const string message = hello + ",world" + "!";
尽管存在“,world”和“!”,此代码仍成功执行。作为字符串文字。但是,类似的尝试会失败,并出现以下情况:
const string exclam = "!"; const string message = "Hello" + ",world" + exclam;
关联性因子
差异在于“ ”运算符的关联性。它从左到右计算,意思是:
(hello + ",world") + "!"
在第一种情况下,“hello”与“,world”连接,产生一个字符串对象。然后该对象与“!”连接。
在第二种情况下,由于连接两个字符串文字的限制,“Hello”和“,world”不能直接连接。这会导致编译器错误。
可能的解决方案
要解决此问题,可以确保“ ”的前两个操作数是字符串对象,或者强制使用括号的求值顺序:
选项 1:字符串对象作为第一个操作数
const string message = string("Hello") + ",world" + exclam;
选项 2:括号
const string message = "Hello" + (",world" + exclam);
为什么字符串文字不能直接连接
字符串文字是字符数组,当在表达式中使用时,它们会转换为指向其初始元素的指针。尝试添加两个字符串文字相当于添加两个指针,这是无效的。
连接字符串文字的替代方法
只需放置字符串文字即可连接它们彼此相邻:
"Hello" ",world"
这相当于:
"Hello,world"
但是,此方法仅适用于字符串文字,不适用于字符串对象或字符数组。
以上是C语言中用'\”连接字符串时,为什么不能直接连接?的详细内容。更多信息请关注PHP中文网其他相关文章!