【问题标题】:Precedence of postfix ++后缀 ++ 的优先级
【发布时间】:2018-05-15 20:59:37
【问题描述】:

考虑这些代码:

int a = 5;
int b = a++;
cout << "b is " << b << endl; // b is 5 

或:

int get_number(){
    int a = 5;
    return a++;
}
int main(){
    int b = get_number();
    cout << "b is " << b << endl; // b is 5
}

根据this table 后缀++ 运算符的优先级高于= 运算符,因此输出应为b is 6。但输出是b is 5。我们该如何解释呢?

【问题讨论】:

    标签: c++ operators


    【解决方案1】:

    内置类型的 postfix++ 运算符(和 postfix-- 运算符)的约定是它返回 前一个值,而不管发生的变化如何。所以该函数仍然返回5,即使收到更改的变量之后被分配了6

    【讨论】:

      【解决方案2】:

      根据expr.post.incr强调我的

      后缀 ++ 表达式的值是其操作数的值。 [ 注:得到的值是原值的副本—— 尾注 ]

      ++ 表达式的值计算在之前排序 操作数对象的修改。关于一个 不定序函数调用,后缀++的操作 是单一的评价

      int a = 5;
      int b = a++; // the value computation for a is
                   // the non-modified / non-incremented value
                   // which is 5
      
      std::cout << "a is " << a << std::endl; // a is 6
      std::cout << "b is " << b << std::endl; // b is 5 
      

      【讨论】:

        猜你喜欢
        • 2018-08-22
        • 2013-02-27
        • 2021-10-25
        • 2015-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-06
        • 1970-01-01
        相关资源
        最近更新 更多