const 成员函数

我们知道,在成员函数中,如果没有修改成员变量,应该给成员函数加上 const 修饰符,例如

 #include <iostream>

 using namespace std;

 class Foo
{
public:
Foo(int x) : _x(x) {}
int getX() const { return _x; }
private:
int _x;
}; int main()
{
Foo f();
cout << f.getX() << endl;
return ;
}

如果不加 const 修饰符,当使用 const 对象调用成员函数时,编译报错:

 #include <iostream>

 using namespace std;

 class Foo
{
public:
Foo(int x) : _x(x) {}
int getX() { return _x; }
private:
int _x;
}; int main()
{
const Foo f();
cout << f.getX() << endl;
return ;
}
jingyg@jingyg:~/share/mytest/cpp_test$ g++ -std=c++ test.cpp
test.cpp: In function ?.nt main()?.
test.cpp::: error: passing ?.onst Foo?.as ?.his?.argument of ?.nt Foo::getX()?.discards qualifiers [-fpermissive]

由测试可知:

  const 对象 非 const 对象
const 成员函数 成功 成功
非 const 成员函数 失败 成功

const 对象有一个隐藏含义:保证成员变量不变。

const 变量还可以作为函数签名的一部分:

 #include <iostream>

 using namespace std;

 class Foo
{
public:
Foo(int x) : _x(x) {}
int getX() const { cout << "with const" << endl; return _x; }
int& getX() { cout << "without const" << endl; return _x; }
private:
int _x;
}; int main()
{
const Foo f();
cout << f.getX() << endl; Foo f1();
int& x = f1.getX();
x = ;
cout << f1.getX() << endl;
return ;
}
jingyg@jingyg:~/share/mytest/cpp_test$ g++ -std=c++ test.cpp
jingyg@jingyg:~/share/mytest/cpp_test$ ./a.out
with const without const
without const

可以看到 const 对象调用 const 成员函数,非 const 对象调用非 const 成员函数

上一篇:简单文本悬浮div提示效果


下一篇:基于Cocos2d-x学习OpenGL ES 2.0系列——使用VBO索引(4)