将字符串文字与字符串连接
在 C 中,运算符可用于连接字符串和字符串文字。但是,此功能存在限制,可能会导致混乱。
在问题中,作者尝试连接字符串文字“Hello”、“,world”和“!”以两种不同的方式。第一个示例:
<code class="cpp">const string hello = "Hello"; const string message = hello + ",world" + "!";</code>
本例中,代码编译并运行成功。这是因为运算符的第一个操作数是字符串对象 (hello),因此编译器将其视为字符串和两个字符串文字的串联。
但是,第二个示例:
<code class="cpp">const string exclam = "!"; const string message = "Hello" + ",world" + exclam;</code>
编译失败。这是因为最左边的运算符试图连接两个字符串文字,这是不允许的。编译器将此代码解释为:
<code class="cpp">const string message = (("Hello" + ",world") + exclam);</code>
第一个串联尝试将两个指针(const char* 文字)添加在一起。
要解决此问题,代码应该:
将前两个字符串之一连接为一个字符串对象:
<code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
使用括号强制先计算第二个字符串:
<code class="cpp">const string message = "Hello" + (",world" + exclam);</code>
无法使用连接两个字符串文字的原因是因为字符串文字存储为字符数组,不能直接将其添加在一起。当您在大多数情况下使用字符串文字时,它会转换为指向其初始元素的指针,这对于运算符来说不是有效的操作数。
因此,请务必记住,只有最左边的两个操作数之一连接表达式中可以是字符串文字。然而,字符串文字可以通过将它们彼此相邻放置来连接,如下所示:
<code class="cpp">"Hello" ",world" "Hello,world"</code>
以上是为什么使用字符串文字进行字符串连接失败?的详细内容。更多信息请关注PHP中文网其他相关文章!