当C++中的const关键字写在成员函数的末尾(在参数列表之后)时,它到底是什么意思?
发布于 2010-10-31 02:16:45
函数签名末尾的const意味着函数应该假定它是其成员的对象是const。实际上,这意味着您要求编译器检查成员函数是否以任何方式更改对象数据。这意味着要求编译器检查它不会直接更改任何成员数据,也不会调用任何本身不能保证不会更改对象的函数。
在创建const对象时,您要求编译器确保该对象在初始化后不会发生更改。这反过来意味着编译器将检查您没有直接更改其成员数据,并且您没有调用任何不能保证它不会更改对象的函数。
这都是常量正确性哲学的一部分。从本质上讲,这意味着如果现在一切正常,它们不会改变,那么它们就永远不会崩溃。换句话说,恒定的东西更容易可靠地工作。函数签名末尾的const是一个用来防止破坏的工具。这反过来意味着您应该尽可能地将const放在任何地方。
发布于 2010-10-31 02:03:12
编译器优化是可能的,但主要好处是强制执行函数声明中表达的约定-如果将成员函数定义为const,编译器将阻止对该函数中的对象进行任何修改。
您可以在类中的各个字段的声明中使用mutable,使其不受此限制。例如,当您有一个封装了自己的lock_guard的类,即使在const成员函数中也必须更改它的值以强制执行线程安全时,这就很有用。
https://stackoverflow.com/questions/4059932
复制相似问题