问题(C++):void f() const { cout << i++ << endl; }中const的作用?

问题(C++):void f() const { cout << i++ << endl; }中const的作用?

class Obj {
   static int i, j;
public:
   void f() const { cout << i++ << endl; }
   void g() const { cout << j++ << endl; }
};

禁止函数修改类的成员变量
你这代码编译会报错的,f和g函数内部不可以修改成员变量i和j的值

回复到这个程度还是不足以采纳么......

参考如下,写的比较详细
const的用法,特别是用在函数前面与后面的区别!_白杨的专栏-CSDN博客_const放在函数前面                                                                         const的用法,特别是用在函数后面在普通的非 con https://blog.csdn.net/zcf1002797280/article/details/7816977

常函数,这种函数里面不可以修改任何成员变量。你这两个函数都会编译报错,因为修改了i和j

修改后的代码:

class Obj {
   /*static*/ int i, j;
public:
   void f() const { cout << i++ << endl; }
   void g() const { cout << j++ << endl; }
};

编译、报错:

$ make
g++ -o classOverloadOperator1 classOverloadOperator1.cpp
classOverloadOperator1.cpp: In member functionvoid Obj::f() const’:
classOverloadOperator1.cpp:15:29: error: increment of member ‘Obj::i’ in read-only object
   15 |    void f() const { cout << i++ << endl; }
      |                             ^
classOverloadOperator1.cpp: In member functionvoid Obj::g() const’:
classOverloadOperator1.cpp:16:29: error: increment of member ‘Obj::j’ in read-only object
   16 |    void g() const { cout << j++ << endl; }
      |                             ^
classOverloadOperator1.cpp: At global scope:
classOverloadOperator1.cpp:20:5: error: ‘int Obj::i’ is not a static data member of ‘class Obj’
   20 | int Obj::i = 10;
      |     ^~~
classOverloadOperator1.cpp:21:5: error: ‘int Obj::j’ is not a static data member of ‘class Obj’
   21 | int Obj::j = 12;
      |     ^~~
make: *** [Makefile:9: classOverloadOperator1] Error 1