连接整数

6 浏览
0 Comments

连接整数

我正在学习C++中的对象和类的概念,同时我注意到有关连接的一些情况。我只是想澄清背后发生了什么以及两者之间的区别。我尝试了两种方式,似乎"+"在age部分(一个整数)上没有正常工作,但在字符串上起作用。

代码:

 man.name = "约翰·威克";
 man.age = 32;
 cout << "这个人的名字是:" << man.name << endl;
 cout <<  "这个人的年龄是:" << man.age << endl;

使用'<<'获得的输出:

这个人的名字是:约翰·威克
这个人的年龄是:32

如果我将'<<'更改为'+'在man.age上,我得到的结果如下。

使用'+'获得的输出:

这个人的名字是:约翰·威克
@@

0
0 Comments

问题的原因是没有区分'+'和'<<'运算符。'+'运算符被重载用于两个字符串的操作,或者一个字符串和一个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 <<比+更高效(显示两个文本)。你是在考虑另一种解决方案或另一种情境吗?

我会小心地声称某个东西更高效,尤其是涉及格式化输出的情况。不,我没有考虑其他解决方案,因为我并没有试图回答这个问题。我只是指出你答案中不正确的部分。

我明白了。所以数据类型之间存在冲突。谢谢!

0