从const对象调用非const成员函数而不使用此函数,为什么会出现错误
Calling non-const member function from const object without using this, why is it an error?
在g++中运行以下代码将导致以下错误:
错误:将"const A"作为"this"参数传递会丢弃限定符[-fpermission]
struct A{
void f(){};
};
int main(){
const A a;
a.f();
return 0;
}
我们在哪里使用this
?
fpermission表示代码不一致。标准在哪里规定这是一个错误?
该标准涵盖了[class.this]中的this
。特别是,请参见示例2,其中(部分(表示:
调用
y.g()
格式错误,因为y
是const
,而s::g()
是一个非常数成员函数。
应用于代码时,等效语句为:
调用
a.f()
格式错误,因为a
是const
,而A::f()
是一个非常数成员函数。
更清楚地说:A::f()
是非常数,因为它缺少const
限定;f()
是否将是合法常量函数(如果添加了const
限定(并不相关。
不过,也许你真正感兴趣的是[class.this]的第一部分,它指出关键字this
在每个非静态成员函数中都有意义,无论该函数中是否使用过this
。
相关文章:
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 从函数返回const char*数组
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 在 const 函数中通过引用和指针返回之间的区别
- 使用 std::string () const 函数启动线程或未来
- 在运算符重载定义中使用成员函数(const错误)
- 使用共享指针的函数调用,其对象应为 const
- 将函数参数"const char*"转换为"std::string_view"是
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 使用按引用调用时,不能在没有对象的情况下调用成员函数 const
- 在呼叫运算符函数const中调用运算符时错误
- 我需要用c ++ 98重写c ++ 11代码,c ++ 11正在使用lambda函数[&](const Output & o
- 函数 const 本地对象在C++会发生什么
- int const函数(参数)、int函数(const参数)和int函数(parameters)const之间的区别是什
- const_cast为函数const设置规则并破坏规则
- 构造函数"const variables"设置的用于表示C++数组的边界?
- 将char**传递给C++中的函数(const char**)
- 复制构造函数const char*和Shared_ptr
- 使函数"const"的意图是什么
- c++嵌套映射不匹配成员函数const成员