gpt4 book ai didi

c++ - 无法在 C++ 中添加字符串

转载 作者:IT老高 更新时间:2023-10-28 21:49:19 25 4
gpt4 key购买 nike

#include <iostream>


int main()
{
const std::string exclam = "!";
const std::string message = "Hello" + ", world" + exclam;
std::cout << message;
return 0;
}

为什么这段代码不起作用?返回错误:

error: invalid operands of types `const char[6]' and `const char[8]' to binary `operator+'

提前致谢!

编辑:

感谢您的所有回答。这是我第一次访问该网站,我对在如此短的时间间隔内进行大量详细解释感到惊讶。

关于实际问题。那么这是怎么回事:

const std::string hello = "Hello";
const std::string message = hello + ", world" + "!";

是因为“,世界”,然后是“!”与变量 hello 连接(已定义)?

最佳答案

因为在 C++ 中,字符串文字(如 "Hello" 不是 std::string 类型。它们是纯字符数组或 C 样式字符串。

所以对于 const std::string message = "Hello"+ ", world"+ exclam; 行,编译器必须使用的类型是:

const std::string message = const char[6] + const char[8] + std::string;

鉴于 + 的结合性,它必须执行的操作是:

const std::string message = ((const char[6] + const char[8]) + std::string);

也就是说,必须先计算最左边的加法,然后将结果传递给最右边的加法。

因此编译器尝试计算 const char[6] + const char[8]。没有为数组定义添加。数组被隐式转换为指针,但这对编译器没有帮助。这只是意味着它以 const char* + const char* 结尾,并且也没有为指针定义任何添加。

此时,它并不知道你希望将结果转换为std::string

但是,在您的第二个示例中:

const std::string hello = "Hello";
const std::string message = hello + ", world" + "!";

它可以工作,因为编译器会看到的操作是 std::string + const char[8] + const char[2]。这里,第一个加法可以转换为std::string + const char*,这里定义了加法运算符,并返回一个std::string 。所以编译器已经成功计算出第一个加法,由于结果是一个字符串,第二个加法看起来像这样:std::string + const char[2],和以前一样,这是'不可能,但是可以将数组转换为指针,然后编译器能够找到一个有效的加法运算符,再次产生 std::string.

关于c++ - 无法在 C++ 中添加字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2329461/

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