在 C++ 中使用 "+" 连接字符串
concatenating strings using "+" in c++
我是一个c++新手,我指的是加速c++。在做其中一个练习题的时候上面写着:
Are the following definitions valid? Why or why not?
const std::string exclam = "!";
const std::string message = "Hello" + ", world" + exclam;
当我尝试&执行程序,我得到一个错误:
二进制操作符+.类型的无效操作数
但是下面的代码工作得很好:
const std::string hello = "Hello";
const std::string message = hello + ", world" + "!";
我不清楚它的执行!为什么第一种情况下的连接不起作用?
谢谢!
第一个表达式
"Hello" + ", world"
编译器需要找到一个合适的函数,比如operator+(const char *, const char *)
。不存在这样的函数,因此无法编译。
相反,
hello + ", world"
正在寻找一个匹配的operator+(const std::string&, const char*)
,并且该过载不存在(它由std::string
提供)。
请注意,即使你可以编写你自己的重载:
std::string operator+ (const char *left, const char *right)
{
return std::string(left) + right;
}
(你不能,正如Praetorian指出的那样)这不是一个好主意。
首先,使用原始参数,您将失去ADL(即,如果标准库将操作符放在命名空间std
中,它通常不会在外部可见)。
这是因为当编译器读取它时,"Hello"
不是std::string
,而是const char *
-这意味着您不能将其用于+
。
你可以简单的修改:
const std::string message = std::string("Hello") + ...
"Hello"
不是字符串,因为它不是std::string
类型的对象。它是一个字符串字面值,它是一个字符数组。不能用+
连接两个字面值,但可以用数组连接std::string
(反之亦然)。
"Hello" + ", world" + exclam
相当于("Hello" + ", world") + exclam
,因此不起作用,因为它试图连接两个字面值。但是,您可以不使用+
操作符将它们连接起来:"Hello" ", world" + exclam
hello + ", world" + "!";
相当于(hello + ", world") + "!"
。它将一个std::string
与一个字面量连接起来;结果是一个新的std::string
,然后与第二个字面值连接。两种连接方式都是允许的
原因是c++是一个在过去半个世纪左右缓慢发展的语言家族的成员,并且在边缘仍然有古代语言的残余。
第一个示例中的"Hello"
和", world"
是const char*对象。由于指针的性质,没有定义将两个字符数组添加到一起的方法,尽管从逻辑上看这似乎很好。
在第二个例子中,hello是一个std::string对象,它定义了一个+操作符,这样当你写:
时hello + ", world"
它创建一个新的std::string对象,其中包含两个内容。
- 使用短运算符的字符串连接有区别吗?
- 字符串连接时间复杂度 c++
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 如何在 C 宏中将变量字符串与文字字符串连接起来?
- C++中干净高效的字符串连接
- 如何将 Unicode 字符串连接成字符串以传递到 mysql 调用中
- 如何与字符串连接thar数组
- 如何将平台^字符串转换为wstring,然后与L字符串连接
- 如何在c++中进行快速字符串连接
- 在C++中,相当于CPython字符串连接
- 如何在 c++ 中使用 STL 将带有空格的字符串连接成一个字符串
- C++将三个char*字符串连接在一起
- 尝试通过二叉树中的递归返回字符串(连接)
- 使用流的字符串连接返回垃圾
- 将字符串变量与整数和文本字符串连接起来的 C++ 字符串流
- 将 int 变量与字符串连接会导致奇怪的输出
- C++ 将常量字符 * 与字符串连接起来,仅打印常量字符 *
- 通过将模板参数与字符串连接起来生成C++类型名
- 将我的对象与字符串连接
- 没有得到预期的结果字符串连接