函数声明结束时的“const”是什么意思?
可能重复:
C ++方法声明中最后一个“const”的含义?
你好,我有一本书,写有这样的东西:
class Foo
{
public:
int Bar(int random_arg) const
{
// code
}
};
另外,还有一个问题:为什么我应该/不应该在参数声明之前使用const
? 这个改变是什么?
int Foo (const int Bar) { /* code */ }
编辑:所以,如果我现在做:
Foo v1, v2;
(const标记的)Bar函数会在内存中存在3次还是1次?
一个“const函数”,在函数声明后用关键字const
表示,使得这个类函数改变该类的成员变量是一个编译器错误。 然而,在函数内读取类变量是可以的,但是在这个函数内写入会产生编译器错误。
考虑这样的“const函数”的另一种方法是通过查看一个类用作正常功能以隐式this
指针。 因此,一个方法int Foo::Bar(int random_arg)
(最后没有const)会产生一个函数,如int Foo_Bar(Foo* this, int random_arg)
和一个诸如Foo f; f.Bar(4)
Foo f; f.Bar(4)
将在内部对应类似于Foo f; Foo_Bar(&f, 4)
Foo f; Foo_Bar(&f, 4)
。 现在,在末尾添加const( int Foo::Bar(int random_arg) const
)可以理解为一个带有const指针的声明: int Foo_Bar(const Foo* this, int random_arg)
。 由于类型this
在这样的情况下是常数,没有成员变量的修改是可能的。
可以放宽不允许函数写入任何类的变量的“const函数”限制。 为了允许某些变量即使在函数被标记为“const函数”时也是可写的,这些类变量被标记为关键字mutable
。 因此,如果一个类变量被标记为mutable,并且一个“const函数”写入该变量,那么代码将会干净地编译并且该变量可能会改变。 (C ++ 11)
像往常一样,在处理const
关键字时,在C ++语句中更改const
关键字的位置具有完全不同的含义。 只有在括号后面的函数声明的末尾添加const
时才会应用const
的上述用法。 const
在C ++中是一个高度过度使用的限定符,语法和顺序通常与指针组合使用并不简单。 一些关于const
正确性和const
关键字的读数:
Const正确性
C ++'const'声明:为什么&如何
考虑两个类型变量:
class Boo { ... };
Boo b0; // mutable object
const Boo b1; // non-mutable object
现在,您可以在b0
上调用Boo
任何成员函数,但只能在b1
上调用const
限定的成员函数。
Bar
保证不改变它被调用的对象。 例如,请参阅C ++ FAQ中关于常量正确性的部分。
上一篇: What is meant with "const" at end of function declaration?