我看到一些别人写的代码 ,经常看到 const方函数定义后面的情况 如下例:
virtual StdString GetKeyFieldName () const = 0;
const不能放在前面,只能放后面?
const 放前面和后面的效果是一样的吗?
如果是一样的话这只是一种写程序的风格!
这样风格有什么好处吗?
放在前面,是说明函数返回值为const类型
放在后面,使说明该成员函数不改变成员变量的值,可被该类的const对象调用
意义不同
const不能放在前面,只能放后面?
const 放前面和后面的效果是一样的吗?
如果是一样的话这只是一种写程序的风格!
这样风格有什么好处吗?
=====================================
不一样!
后面一个是表示该函数内不改变类成员。 而且如果是const 对象只能调用 后面加 const的函数。 还有就是后面一种只能是类成员函数才有。
方法声明后面加const,表明此方法是只读的,即此方法不能修改对象属性值.
这也意味着:此方法不可以调用其它非只读方法.另外,对象常量只能调用只读方法!
如果在前面加const,就说明返回值是常量
const不能放在前面,只能放后面?
const 放前面和后面的效果是一样的吗?
/////////////////////////////////////////
放在后面是申明成员函数为常量,函数体内对成员变量是只读的,
放在前面毫无意义
所以效果是不一样的
准确地回答一下:
class A
{
virtual StdString GetKeyFieldName () const = 0;
virtual StdString Another() = 0; // 假设另外一个方法没有‘const’
}
那么,当有一个实例时:
A * pa = new XXX(A的子类);
时,pa->GetKeyFieldName() 和 pa->Another() 都是可以调用的。
但是在另一种情况,当指针为 const 时
const A * pa2 = pa;
时,pa2->GetKeyFieldName() 是可以被调用的,而 pa2->Another() 是不可以被调用的。
声明成员方法时 const 放在前面表示返回类型为常量,放在后面表示这个方法内部不可以修改成员变量,也就是说,这个方法可以在类实例为常量的时候被调用。
我现在已经系统地回答了这个问题,希望楼上的兄弟们在不确定的时候不要乱说,不要误人子弟!
我看到一些别人写的代码 ,经常看到 const方函数定义后面的情况 如下例:
virtual StdString GetKeyFieldName () const = 0;
const不能放在前面,只能放后面?
const 放前面和后面的效果是一样的吗?
virtual StdString GetKeyFieldName () = 0;//申明GetKeyFieldName是StdString 类型的纯虚函数;
StdString GetKeyFieldName () const ;//申明GetKeyFieldName 是常成员函数;
virtual StdString GetKeyFieldName () const = 0;//上述二者的结合体