为什么从常量函数c++的主体中调用非常量函数
Why calling non const function from in body of const function c++?
考虑以下代码,在这种情况下输出为:
f非常数
g常量
这有点令人困惑,因为someClass正在从其常量函数中为常量数据成员调用非常量函数
#include <iostream>
using namespace std;
class Inner
{
public:
void f() const { cout<< "f const" <<endl; }
void f() { cout<< "f non const" <<endl; }
};
class someClass
{
Inner * const obj2;
public:
someClass():obj2(){}
void g() {obj2->f(); cout<< "g non const" <<endl; }
void g() const {obj2->f(); cout<< "g const" <<endl; }
};
int main()
{
const someClass a;
a.g();
}
为什么someClass在这种情况下调用非常量函数?
我想您在问为什么调用void Inner::f()
。这是因为您有一个指向非常量Inner
:的const
指针
Inner * const obj2;
如果你想要一个指向const Inner
的指针,那么你需要
const Inner * obj2;
或
Inner const * obj2;
如果你想要一个指向const
内部的const
指针,
const Inner * const obj2;
我会让你想出另一个选择。
答案如下:
类someClass中的obj2是Inner*const的类型,这意味着指针是const,而不是数据本身,因此它调用的是一个非常量函数。
为了获得预期的输出,obj2必须以这种方式声明:
Inner const * obj2;
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- constexpr构造函数需要常量成员函数时出现问题
- std::函数常量正确性未遵循
- 具有常量引用参数的函数模板专用化
- constexpr 函数获取常量字符*
- 在定义的函数中使用常量时出错
- Clang 格式 10.0 与 5.0 常量成员函数的格式不同
- C++ 获取函数在常量引用中按值返回的结果
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 为什么下面带有非常量转换函数的代码没有歧义?
- 与 map 一起使用时复制构造函数常量错误
- 静态函数常量静态成员函数
- 如何在指向常量地址时声明成员函数常量指针
- C++getter函数:常量和非常量
- C++循环中调用伪随机数生成器函数 - 常量种子问题
- 提升::任何构造函数 - 常量类型重载分辨率
- 函数常量返回类型:类型引用的初始化无效
- C++模板通过指针的函数/常量指针的函数进行的部分专用化没有什么不同
- 虚函数常量与虚函数非常量