【发布时间】:2014-07-19 03:07:42
【问题描述】:
在我的文件顶部
#define AGE "42"
稍后在文件中我多次使用 ID,包括一些看起来像的行
1 std::string name = "Obama";
2 std::string str = "Hello " + name + " you are " + AGE + " years old!";
3 str += "Do you feel " + AGE + " years old?";
我得到错误:
“错误:‘const char [35]’和‘const char [2]’类型的无效操作数到二进制‘operator+’”
在第 3 行。我做了一些研究,发现这是因为 C++ 如何处理不同的字符串,并且能够通过将“AGE”更改为“string(AGE)”来修复它。但是,直到今天我不小心错过了其中一个实例,并且想知道为什么编译器没有抱怨,即使我仍然有一个只是“AGE”的实例。
通过一些试验和错误,我发现我只需要 string(AGE) 在我不连接在函数体中创建的另一个字符串的行上。
我的问题是“在后台发生了什么,C++ 不喜欢将字符串与预处理器放置的字符串连接起来,除非你也在连接你在函数中定义的字符串。”
【问题讨论】:
-
感谢您的解释。尽管我决定摆脱宏,但我很高兴我知道“为什么”。
标签: c++ string c-preprocessor stdstring