1

我编写了以下代码。我写了两个函数 increase 和 constincrease ,它们将类引用作为输入。constincrease 将其视为常数,而 increase 更简单并允许对其进行修改。

我不明白为什么行无法编译

increase(fun());// 这行编译失败

.. 我知道临时对象是常量,因此上面的行可能会失败,因为 increase 需要一个非常量引用。但是,如果我们看到还有另一行代码通过

increase(x3);

重点是为什么上面的行通过了,但其他东西无法正确编译。

class X{
      public:
          int i ;
      };

X fun(){
      return X();
      }

void  increase(  X & p ) 
      {
        cout<< "\n non-const-increase called ";
    p.i++;
      }

void  constincrease(  const X & p ) 
      {
        cout<< "\n const-increase called ";                   
        // this function p is const so   p.i++; is wrong ...
      }

int main(int argc, char *argv[])

{

    X x3;
    x3.i=9;
    increase(x3);  // this line passes compilation 
    constincrease(x3); // const-increase alwasy passes

    increase(fun()); // this line fails to compile 
    constincrease(fun()); // const -increase passes
    system("PAUSE");
    return EXIT_SUCCESS;
}
4

0 回答 0