void foo(const ClassName &name)
{
...
}
Run Code Online (Sandbox Code Playgroud)
如何访问类实例名称的方法?
name.method()没用.然后我试过:
void foo(const ClassName &name)
{
ClassName temp = name;
... ....
}
Run Code Online (Sandbox Code Playgroud)
我可以使用temp.method,但是foo执行后,原来的名字搞砸了,任何想法?BTW,名称的成员变量没有搞砸,但它是类的子类的成员变量搞砸了.
您所提供的描述中去,它看起来像method()在ClassName为一个非const方法.如果您尝试在const对象上调用非const方法,编译器将抛出错误.当您ClassName temp = name;创建时,您将变量的副本创建为临时非const对象temp.您可以在此对象上调用任何方法,但由于它是副本,因此对该对象进行的修改不会反映在name对象中.
编辑
解决这个问题的最好方法是,ClassName::method如果它不修改任何成员变量,则使const成为可能.如果是,则不应将函数foo中的参数作为const引用.您应该将参数作为非const引用.