如何使类的方法为const
how can I make a method of a class be const
如何正确地写入:
bool const f(...);
or bool f(...) const ;
or const bool f(...) ;
我的意思是,他们之间是否有区别?
const bool f();
表示它返回一个永远不会更改其值的常量布尔bool f() const;
说f是一个常量函数,它不会修改类中的任何变量
在const bool f();
的情况1中,返回的bool必须声明为常量,并在声明或类的构造函数中初始化。
const bool f() { return m_bool; }
其中m_bool被声明为const bool m_bool = false;
在情况2 bool f() const;
中,返回值并不保证它永远不会被更改,但函数本身保证它不会更改类内的任何数据成员,也不会调用任何未声明为const的成员函数。(部分例外情况适用)
bool f() const { return m_bool; } // valid
bool f() const { m_bool = false; return m_bool; } // invalid, m_bool cannot be changed from a const function.
其中m_bool可以声明为const bool m_bool = false;
或bool m_bool;
有关常量变量的更多信息可以在此处找到,有关常量函数的更多信息也可以在此处查找。
- 布尔常量f(…)
- 布尔f(…)常量
- const bool f(…)
1和3是相同的东西,只是const
和bool
的顺序不同。这两个表示返回的bool是一个常量。但是,由于您的代码很可能正在执行类似bool b = myobject.f();
的操作,因此变量b
无论如何都是f()
返回的值的副本,因此没有任何区别。
2使函数f()
中的this
指针成为const T *this
(其中T是您的类),这意味着类中的任何内容都不允许修改。这可能是你最初想要的。
函数名称之前的是返回类型。类型中的const
适用于它左边的任何内容,除非它左边什么都没有,在这种情况下,它适用于右边的任何内容。因此,第一个和第三个返回类型是const
bool
s,第二个是非const
bool
。具有const
返回类型意味着不能修改返回的值。
在函数自变量列表之后具有const
使得函数成为const
函数。这只适用于成员函数(即在类中声明的)。const
成员函数只能在const
对象上调用。因此,如果您有一个类foo
和一个非const
成员函数f
,您将无法执行以下操作:
const foo a_foo;
a_foo.f(); // Error because a_foo is const but f is not a const member function
因此,选项1和3是相同的——它们是返回const bool
的非const
函数——而选项2是不同的——它是返回bool
的const
函数。
- 从 const 对象访问非 const 方法
- 为什么我可以调用一个从const方法更改成员的方法
- 使用新的c++返回值语法的Const方法
- const_cast const 方法中的"this"将"this"分配给外部变量?
- const 方法使用引用修改对象
- 从具有相同基数的另一个派生类调用派生类的非 const 方法
- 返回非常量引用编译的 Const 方法
- C++:无法从 const 方法返回对象的shared_ptr
- 是否可以从 const 方法迭代链表
- 为什么在const和非const方法中删除代码重复不是不确定的行为
- 在使用指向 const 和非 const 方法的成员指针时减少模板专用化的数量
- "可变"变量只能由 const 方法之一可变?
- Golang中的const方法
- C++ 逻辑恒常性和 const方法的按值返回
- c++将标志添加到const方法中
- C++防止const方法通过成员指针或引用更改数据
- 为什么 const 方法不覆盖 C++ 中的非 const 方法?
- 如何在const方法中迭代映射
- 为什么没有标准化的方法来避免const方法的代码重复
- 修改 const 方法中的 pointee 值