连接整数
连接整数
我正在学习C++中的对象和类的概念,同时我注意到有关连接的一些情况。我只是想澄清背后发生了什么以及两者之间的区别。我尝试了两种方式,似乎"+"在age部分(一个整数)上没有正常工作,但在字符串上起作用。
代码:
man.name = "约翰·威克"; man.age = 32; cout << "这个人的名字是:" << man.name << endl; cout << "这个人的年龄是:" << man.age << endl;
使用'<<'获得的输出:
这个人的名字是:约翰·威克 这个人的年龄是:32
如果我将'<<'更改为'+'在man.age上,我得到的结果如下。
使用'+'获得的输出:
这个人的名字是:约翰·威克 @@
问题的原因是没有区分'+'和'<<'运算符。'+'运算符被重载用于两个字符串的操作,或者一个字符串和一个const char*
的操作,但不适用于字符串和整数的操作。例如:cout<< "The man's nickname is " + "Jhon";
不能按预期工作,因为两个操作数都是const char*
类型。
cout<< "The man's nickname is " + man.nickname;
按预期工作,因为第一个操作数是一个字符串,第二个操作数是const char*
类型。
但是cout<< "The man's age is " + man.age;
不能正常工作,因为man.age既不是字符串也不是const char*
类型。
'<<'运算符,因为它是一个流运算符,可以与更多不同的操作数一起工作。为了理解它是如何工作的,让我们解析一下它在你的例子中的工作方式。
你的代码是cout<< "The man's age is "<< man.age;
。
这行代码的作用是:
cout<< "The man's age is "
将" The man's age is "添加到流cout中,通过适当地将这个const char*
转换。- 完成后,
cout<< man.age;
将数字转换并将其添加到流中。
请注意,你可以重载'+'运算符,以添加连接字符串和整数的可能性,但我不建议这样做,因为对于你的情况,流运算符已经很有效。
如果你认为"abc"
是一个字符串(确切地说是一个C字符串,而不是std::string
),那么你不能重载一个字符串和一个整数的+
运算符。至少一个操作数必须是用户提供的类,而int
和""
都不是。
你是对的,我已经改正了。
然后再次说"[...]一个标有"A sample of text"
的值可以根据上下文被编译器评估为const char*
或std::string
"是不正确的。它总是一个const char[]
,它会衰减为const char*
。它永远不是std::string
。可以从这样的参数构造std::string
,但它本身不是std::string
...
已经改正了。
然后我们又回到了不正确的最后一段。而且,你还加了一句说operator <<
非常高效。实际上,它非常慢。
在这种情况下,operator <<
比+更高效(显示两个文本)。你是在考虑另一种解决方案或另一种情境吗?
我会小心地声称某个东西更高效,尤其是涉及格式化输出的情况。不,我没有考虑其他解决方案,因为我并没有试图回答这个问题。我只是指出你答案中不正确的部分。
我明白了。所以数据类型之间存在冲突。谢谢!