Const在C++中通过引用传递类成员时没有效果

Const在C++中通过引用传递类成员时没有效果,c++,constants,C++,Constants,考虑以下代码: 包括 类对象计算器{ 公众: 结构对象{ int id=0; }; void setObjectObject和object const{ object.id=1; } 对象m_对象; }; int main{ ObjectCalculator objCalc{}; std::cout与类成员相关的常量。 您可以修改方法参数,以便可以对其进行更改,而不考虑常量 const after方法应用于隐式第一个方法参数this,所有类成员都通过该参数访问 非静态成员函数可以用常量、vola

考虑以下代码:

包括 类对象计算器{ 公众: 结构对象{ int id=0; }; void setObjectObject和object const{ object.id=1; } 对象m_对象; }; int main{ ObjectCalculator objCalc{}; std::cout与类成员相关的常量。 您可以修改方法参数,以便可以对其进行更改,而不考虑常量

const after方法应用于隐式第一个方法参数this,所有类成员都通过该参数访问

非静态成员函数可以用常量、volatile、, 或常量volatile限定符此限定符出现在 函数声明中的参数列表。不符合条件 函数具有不同的类型,因此可能会相互重载

在cv限定函数的主体中,此指针是 cv合格,例如,在常量成员函数中,只有其他常量成员 函数可以正常调用。非常量成员函数可以 如果应用const_cast或通过访问路径,仍将调用 这不包括这一点

与该类成员相关的常量。 您可以修改方法参数,以便可以对其进行更改,而不考虑常量

const after方法应用于隐式第一个方法参数this,所有类成员都通过该参数访问

非静态成员函数可以用常量、volatile、, 或常量volatile限定符此限定符出现在 函数声明中的参数列表。不符合条件 函数具有不同的类型,因此可能会相互重载

在cv限定函数的主体中,此指针是 cv合格,例如,在常量成员函数中,只有其他常量成员 函数可以正常调用。非常量成员函数可以 如果应用const_cast或通过访问路径,仍将调用 这不包括这一点

const限定符表示函数不修改此对象

通过将要修改的对象作为参数传递,如果不修改此参数,则修改作为参数传递的对象

如果您试图修改函数中的m_对象,您将得到预期的错误。

常量限定符用于指示函数不修改此对象

通过将要修改的对象作为参数传递,如果不修改此参数,则修改作为参数传递的对象


如果您试图修改函数中的m_对象,您将得到预期的错误。

参数本身不应该被赋予限定符吗?void setObjectObject&object const->void setObjectconst object&object const>参数本身不应该被赋予限定符吗?void setobjectobjectobject&object const->void setObjectconst object&obje谢谢你的回答!不过有一件事我想澄清一下,当我调用objCalc.setObjectobjCalc.m_对象时,objCalc.m_对象是通过引用传递的,所以从技术上讲它的地址不会改变,也就是说,编译器应该将其视为类成员并禁止更改?为什么不会发生?const方法:void object::setObjectconst Ob这是对C++中所有非静态类方法的隐式。非const方法:空格对象::StasObjeToBask*,this,Objor和Objor。访问类成员方法的方法是this -> MyObjor对象,它将通过这个指针和当前的问题,内部方法。编译器理论上可以看到,你通过引用。类成员,但它不能用它做任何事情,也不应该。它只是对象&编译器对地址一无所知,它使用抽象语法树进行操作。谢谢你的回答!不过有一件事我想澄清,当我调用objCalc.setObjectobjCalc.m_对象时,objCalc.m_对象是通过引用传递的,所以从技术上讲地址不改变,即编译器应该把它看作类成员并禁止更改?为什么不发生?const方法:空格对象::StObjutsconst对象*.Object和Obj..对于C++中的所有非静态类方法,这是隐式的。非const方法:空格对象::StasObjeToStubject *,这个对象和对象。er inside方法是这个->m_对象,它正在通过这个指针和const,此时在方法内部非常重要。理论上,编译器可以看到,您将引用传递给类成员,但它不能用它做任何事情,也不应该用它做任何事情。它只是对象-。编译器对地址一无所知,它使用抽象语法树进行操作。