【发布时间】:2016-06-30 01:37:47
【问题描述】:
假设我有以下课程:
struct A{
void method(A& otherA) const{
/* Mutate otherA */
}
};
然后我有这个:
A myA;
myA.method(myA);
我已经告诉编译器method 不会更改this 实例,但编译器是否意识到我可以将this 实例作为参数传入?
我这样做会破坏一些东西吗?这是已定义的行为吗?
【问题讨论】:
-
是的,你可以做到。编译器无法知道它们是否是同一个实例。如果您不希望更改传递的参数,则应将参数类型设为
const。 -
@songyuanyao 没有....但是我确实想改变它
-
那就没事了。您可以通过传递的参数来更改它。
-
const表示方法中this->不会改变对象,但仍可能通过其他方式改变对象 -
附带说明:编译器通常根本不会根据函数参数(包括 this 指针)的常量进行优化。
标签: c++ constants language-lawyer