函数声明结束时的“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中关于常量正确性的部分。

链接地址: http://www.djcxy.com/p/6897.html

上一篇: What is meant with "const" at end of function declaration?

下一篇: Type to use to represent a byte in ANSI (C89/90) C?