【问题标题】:Meaning of "+ +" operator (not ++) [duplicate]“++”运算符的含义(不是++)[重复]
【发布时间】:2017-02-08 04:37:28
【问题描述】:

为什么这段代码还能编译? “++”运算符是什么意思?

#include <string>
int main()
{
  std::string c = "abc";
  c = c + + "d";
  c = c + + + "d";
  c = c + + + + "d";
  c = c + + + + + "d";
  printf("%s\n", c.c_str());
}

【问题讨论】:

  • 的重复“C++中的“-->”运算符的名称是什么?”???你是吸毒者吗?
  • @LightnessRacesinOrbit 我只能关闭。如果您想重新打开并修复它,那就太好了。事后看来,我应该先等待它关闭,然后再修复它。
  • @NathanOliver:问题已经结束,那里有一个很好的骗局,所以现在没有任何意义。但我对人们有时会做的奇怪事情摇头。
  • @Lightness 很酷的东西。希望你注意到我克制了 ;)
  • @LightnessRacesinOrbit 是一回事; C 中没有运算符 --&gt;,就像没有 + + 一样。这些是被误认为是一个操作员的标记块。修复方法是修正对 C 标记化和语法的理解,正确解析结构,然后使用参考手册来理解实际运算符的含义。我之所以选择这个问题,是因为它是列表中第一个被关闭为重复的问题,这与操作员聚集并认为它是一个有关。

标签: c++


【解决方案1】:

这只是很多一元的优点。

【讨论】:

  • 你……确定吗?
  • 不是只是一元加号
【解决方案2】:

没有+ + 运算符。有一个 + 运算符(以一元和二元形式出现)和一个 ++ 运算符,此处未使用。

其中每一个都是一个二元 + 运算符,后跟一个或多个一元 + 运算符。

这个:

c = c + + "d";

等价于

c = c + (+ "d");

这个:

c = c + + + "d";

相当于:

c = c + (+ + "d");

或:

c = c + (+ (+ "d"));

等等。

【讨论】:

    【解决方案3】:

    第一个+ 是一个二进制加法,它计算c 和第二个项的和。

    其余的+ 是一元加运算符。在+ "d" 中,"d" 的类型为const char[2],并衰减为const char*。然后+作用于没有作用的指针,返回同样的const char*

    c + + + "d" 等价于c + (+(+"d"))

    【讨论】:

    • "d" 的类型为 const char[2],而不是 char[1],并衰减为 const char *
    • 已修复。不确定它是否真的是const char* const(常量指针)
    • 非类类型的prvalues不能是constvolatile-qualified,所以只能是const char *。简单测试用例:const char * &amp;&amp;str = "str";
    猜你喜欢
    • 2018-02-19
    • 2016-07-25
    • 1970-01-01
    • 2012-02-28
    • 2019-09-12
    • 2012-09-09
    • 2016-12-11
    • 2020-05-26
    • 2021-03-29
    相关资源
    最近更新 更多