”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用“+”运算符安全地连接字符串文字和对象?

如何使用“+”运算符安全地连接字符串文字和对象?

发布于2024-11-02
浏览:855

How Can You Safely Concatenate String Literals and Objects Using the \' \' Operator?

连接字符串文字和对象:探索 ' ' 运算符

在他的《Accelerated C》一书中,Koenig 介绍了使用 ' ' 运算符连接字符串的概念文字和对象。虽然这看起来很简单,但存在一些微妙的细微差别,可能会导致意想不到的结果。

谜题:两个例子,一个成功,一个失败

考虑以下两个例子:

const string hello = "Hello";
const string message = hello   ",world"   "!";
const string exclam = "!";
const string message = "Hello"   ",world"   exclam;

第一个示例成功连接了三个字符串。然而,第二个示例失败了。

理解错误:运算符关联性和从左到右计算

要理解差异,我们必须考虑“ ”运算符的关联性。 ' ' 运算符是从左到右关联的,这意味着它从左到右进行计算。如果不考虑的话,这可能会导致意外的行为。

在第二个示例中,表达式可以用括号括起来:

const string message = ("Hello"   ",world")   exclam;

如您所见,两个字符串文字“Hello”和“,world”首先连接在一起。这会产生一个字符串文字,无法与字符串对象“exclam”进一步连接。

解决方案:处理 ' ' 运算符的行为

有多种方法可以解决此问题:

  • 使用 std::string 对象作为参数之一:
const string message = string("Hello")   ",world"   exclam;
  • 显式括号控制计算顺序:
const string message = "Hello"   (",world"   exclam);

为什么不能连接两个字符串文字?

“ ”运算符旨在连接字符串对象,而不是字符串文字。字符串文字是一个字符数组,当在表达式中使用时,它会转换为指向其初始元素的指针。在 C 中不允许添加两个指针,就像连接字符串文字一样。

通过并置进行字符串文字连接

虽然不能使用 ' ' 运算符连接字符串文字,但您可以通过并排放置它们来组合它们:

"Hello" ",world"

这相当于:

"Hello,world"

这对于将长字符串文字分解为多行很有用。

版本声明 本文转载于:1729730169如有侵犯,请联系[email protected]删除
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3