gpt4 book ai didi

c++ - 在 C++ 中使用 '+' 运算符将字符附加到字符串文字时究竟会发生什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:22 26 4
gpt4 key购买 nike

根据我的阅读,以下代码:

string aggregate = "give" + 'n';

应该生成一个结果字符串,其值为:

“给定”。

它反而会产生垃圾。为什么不会发生以下情况?

  1. “give”通过采用指向字符数组的指针的构造函数转换为 std::string。

  2. 调用采用 std::string 和字符的“+”重载,返回新字符串。

我的理论基于 this手册页。

现在,我听说如果重载运算符是类的成员,则重载运算符的第一个参数不是构造函数转换的候选对象。我相信我在 Koenig 和 Moo 中读到了这一点。但是,在这种情况下,我将“+”运算符理解为非成员重载。

我意识到这似乎过于复杂了,但我想确定知道我在编写代码时发生了什么。

最佳答案

首先对表达式"give"+ 'n'求值,将(int)'n'添加到字符串常量"give"的地址。该指针运算的结果分配给字符串对象。不会引发错误,因为结果的类型为 const char*

您应该习惯于将 = 右侧的所有内容都视为发生在实际赋值(或本例中的初始化)之前。

您需要以下内容:

// construct the string object first
std::string aggregate = "give";

// then append the character
aggregate += 'n';

或者,首先显式构建一个字符串对象:

std::string aggregate = std::string("give") + 'n';

关于c++ - 在 C++ 中使用 '+' 运算符将字符附加到字符串文字时究竟会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5264597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com