gpt4 book ai didi

c++ - 关于如何避免运算符重载错误的新手建议

转载 作者:行者123 更新时间:2023-11-30 03:35:10 24 4
gpt4 key购买 nike

我的一个学生问我为什么下面的代码会产生他认为神秘的输出结果。

代码:

#include <iostream>

int main() {
char op = '+';
int num = 9;
std::string res =
"a const char* concatenated with a char and std::string "
+ op + std::to_string(num);
std::cout << res << std::endl;
}

好吧,他希望得到:const char* concatenated with a char and std::string + 9 但不明白为什么他只得到 std::string 9。很明显,如果它是函数调用而不是运算符,问题会立即出现。

我可以给新手一些关于如何避免此类运算符重载错误的建议吗?

最佳答案

"a const char* concatenated with a char and std::string "const char[]文字,不是 std::string .将一个整数(char 是一个小整数)添加到 C 样式数组会生成一个临时指针,该指针指向该数组的编号偏移量。

避免此类问题的一般建议:避免使用 C 风格的数组(包括 C 风格的字符串文字)。

您可以使用 C++ 字符串文字:

using namespace std::string_literals;   // need once in the code

std::string res =
"a const char* concatenated with a char and std::string "s
+ op + std::to_string(num);

注意 s在文字的末尾。你需要 #include <string> -- 原始程序也应该有。


如果您使用的是不支持 std::string 的旧编译器字面量然后构建字符串也可以通过流式传输到内存缓冲区来执行:

std::ostringstream buffer;
buffer << "bla bla bla" << op << num;
std::string res = buffer.str();

关于c++ - 关于如何避免运算符重载错误的新手建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454635/

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