【问题标题】:Concatenating an integer [duplicate]连接一个整数[重复]
【发布时间】:2019-12-09 19:27:28
【问题描述】:

我正在研究 c++ 中的对象和类的概念,在这样做的同时,我注意到了一些关于连接的事情。

我只想澄清这背后发生的事情以及两者之间的区别。

我都试过了,似乎“+”在年龄部分上不能正常工作,它是一个整数,但在字符串上工作。

代码:

 man.name = "john wick";
 man.age = 32;

 cout << "The man's name is: " << man.name << endl;
 cout <<  "The man's age is: " << man.age << endl;

我使用 ' 得到的输出

The man's name is: john wick
The man's age is: 32

如果我在man.age中将'

我使用“+”得到的输出:

The man's name is: john wick
@@

【问题讨论】:

  • C++ 中没有字符串和整数的连接运算符。您无意中发现的是字符串文字上的 指针算术,在这里解释起来需要很长时间。查阅您最喜欢的 C++ 书籍。
  • @foreknownas_463035818 谢谢!我刚刚编辑了帖子,我之所以“站立”是因为我不小心在问题中包含了不相关的下一行代码。
  • @john 好的,谢谢!
  • 您的代码显示n is standing. 与现在显示@@ 的原因相同。通过将32 添加到The man's age is: (即const char * ),您将该指针移动32,指向内存中的不同地址。在您对另一个 const 字符串的原始问题中,您在当前版本的问题中使用了以 n is standing. 结尾的其他地方,它是内存中存在 @@ 后跟 \0 的位置。

标签: c++


【解决方案1】:

您的问题是您不区分“+”和“

'+' 运算符被重载用于 2 个字符串或一个字符串和一个 const char* 的操作,但不适用于一个字符串和一个整数。例如 : cout&lt;&lt;"The man's nickname is "+"Jhon"; 没有按预期工作,因为两个操作数是const char*
cout&lt;&lt;"The man's nickname is "+man.nickname; 按预期工作,因为第一个操作数是字符串,第二个是const char*
但是cout&lt;&lt;"The man's age is "+man.age; 无法正常工作,因为 man.age 不是字符串或const char*

' 您的电话是cout&lt;&lt;"The man's age is "&lt;&lt;man.age;
这条线的作用是:

  • cout&lt;&lt;"The man's age is " 通过转换 const char*properly 将“男人的年龄是”添加到流 cout。
  • 完成后,cout&lt;&lt;man.age; 会转换数字并将其添加到流中。

请注意,您可以重载“+”运算符以添加连接字符串和整数的可能性,但我不建议这样做,因为流运算符对于您的情况来说还很有效。

【讨论】:

  • 如果您认为"abc" 是一个字符串(准确地说是一个c 字符串,而不是std::string),那么您不能为字符串和@987654335 重载+ 运算符@。至少一个操作数必须是用户提供的类,int"" 都不是。
  • 你说得对,我更正了。
  • 然后,“[...] 标注为 "A sample of text" 的值可能会被编译器评估为 const char *std::sting,具体取决于上下文”是不正确。它总是一个const char[],它衰减为const char*。从来不是std::stringstd::string 可以从这样的参数构造,但它不是 std::string 本身...
  • 我会小心地声称某些东西更有效,尤其是在格式化输出方面。不,我没有考虑任何其他解决方案,因为我不尝试回答这个问题。我只是指出你答案的不正确部分。
  • 我明白了。所以数据类型之间存在冲突。谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 2013-02-26
  • 2011-02-20
  • 2016-04-19
相关资源
最近更新 更多