c++ - 字符串运算符 +(重载)char 数组和 string.in cpp 的不同行为
问题描述
我尝试使用字符串运算符合并 2 个数组。以下案例工作正常,+ 运算符接受 char* 和字符串。
string s = "";;
char a[5] = { 'f', 'i', 'r', 's', 't' };
char b[6] = { 's', 'e', 'c', 'o', 'n', 'd' };
s = a + string(b);
但是当我传递 char* 和 string 时,这种情况不能正常工作。我很困惑为什么会这样?
string s = "";;
char a[5] = { 'f', 'i', 'r', 's', 't' };
char b[6] = { 's', 'e', 'c', 'o', 'n', 'd' };
s = a + "{";
有人可以解释一下吗?
解决方案
因为"{"
is not std::string
, but const char[2]
(包括空终止符字符)可能衰减到const char*
. 然后a + "{"
只是无效的指针算术(加法)。
您需要将任一操作数更改为std::string
以使operator+
forstd::string
被调用。例如
a + std::string("{");
或使用文字(C++14 起)。
a + "{"s;
推荐阅读
- wordpress - 根据来自 WordPress 的网站重定向访问者
- amazon-web-services - 从 EC2 Classic 迁移到 VPC 时,除了通过 ClassicLink 附加之外,我还需要做更多的事情吗?
- javascript - 我有一个按钮,我只想通过左键单击而不是输入键来按下它
- memory-management - 如果没有 Rust 风格的借用检查,Rust 风格的所有权和生命周期是否可行?
- react-native - React native Flatlist 不会在状态更改时重新渲染
- c++ - 真的可以将存储分配与对象初始化分开吗?
- haskell - 非详尽的模式匹配?
- python - 具有不同级别的多个子图的单个颜色条
- sql - 子查询SQL的查询
- ms-access - 对 Docusign 的 MS 访问报告