我正在从地址https://cs.senecac.on.ca/~chris.szalwinski/archives/btp200.081/content/overl.html读取一些C ++文本。 在第一行中,他们说:
成员函数的签名包括:
函数名称
其参数的数据类型
参数的顺序和
可能
函数的const状态。
我不明白他们的意思是说“函数的const状态”。
有人可以详细说明吗? 感谢。
答案 0 :(得分:4)
在C ++中,您可以通过将该关键字附加到其签名(例如,const
)来将类的成员函数声明为int MyClass:doSomething(int param) const {...}
。这样做可以保证函数不会更改调用函数的类对象的(非mutable
)成员 - 因此可以使用该类的const
实例调用它。 / p>
允许为一个类的两个不同的成员函数,其签名的不同之处仅在于它们是否被声明为const
。
答案 1 :(得分:3)
它们的意思是总结函数必须不同的项目,以便放入相同的类范围。最后的const
是:
struct A {
void f();
void f() const;
};
这些是有效的重载。如果您在f
上拨打A
,则会先拨打第一个,如果您在const A
上拨打,则使用第二个:
A a;
a.f(); // takes first
A const& b = a;
b.f(); // takes second
请注意,此处滥用术语“签名”。函数的签名更广泛,并且还包括函数所属的类。签名唯一标识一个函数。
答案 2 :(得分:0)
将成员函数声明为const
告诉编译器成员函数不会修改对象的数据,也不会调用非const的其他成员函数。
编译器将检查以确保您确实不修改数据。您可以为const或非const对象调用const成员函数,但不能为const
对象调用非const成员函数(因为它可以修改对象)。
您可以在C ++ here中阅读有关constness的更多信息。