【问题标题】:Can someone tell me the output and provide explanation of the following c++ code? [duplicate]有人可以告诉我输出并提供以下 c++ 代码的解释吗? [复制]
【发布时间】:2021-10-04 23:04:01
【问题描述】:
cout<<"#" + 'a'<<endl;

string s = "#";
s += 'a';
cout<<s<<endl;

"#" + 'a' 的情况下,我无法弄清楚类型转换是如何工作的

【问题讨论】:

  • “在"#" + 'a' 的情况下,类型转换是如何工作的” - "#" + 'a' 生成一个指针算术计算,你肯定会 想要。
  • "#" + 'a' 是未定义的行为,输出可以是任何东西。
  • "#"const char[2] ({'#', '\0'}) 衰减为 const char*
  • @TusharGupta 你把“c++ 指针算法”放在任何搜索引擎中,你就会有几个小时的阅读材料。
  • 感谢@Jarod42 和我现在知道的所有人。我正在添加一个char* to a char,它被强制转换为int。所以基本上我在做char* + int。因此奇怪的输出。

标签: c++ c++11 output c++14


【解决方案1】:

在 cpp 中,字符串就像一个字符数组,所以当你分配 s = '#' 时,它会像这样编译:

s[0] = '#'

在第二行它实际上是这样编译的:

s[1] = 'a'

最后,s 是:

#a

【讨论】:

  • cout&lt;&lt;"#" + 'a'&lt;&lt;endl 你能解释一下这个的输出吗?第二个的解释是正确的。
  • 显示隐含的s.resize(1)s.resize(s.size()+1) 可能很有用。但是,这并没有回答有趣的问题。
猜你喜欢
  • 2020-05-29
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2023-04-02
  • 2023-02-08
  • 1970-01-01
相关资源
最近更新 更多