【发布时间】:2015-01-20 03:03:17
【问题描述】:
我正在学习鄙视const。
struct b;
struct a {
b* p;
void nonConst() { p = nullptr;}
b* getP() const { return p;}
};
struct b {
a *p;
a *getP() const { return p;}
};
void func (const a *ii) {
b *uRef = ii->getP();
//dear god, we've just obtained a pointer to a non-const a, starting with const a
a *iii = uRef->getP();
//and we've just modified ii, a const object
iii->nonConst();
}
int main() {
a *i = new a;
b *u = new b;
i->p = u;
u->p = i;
func(i);
}
这会导致任何未定义的行为吗?如果不是,它是否违反了任何const 规则?如果不是这样,为什么this 被视为指向const 数据的const 指针,而不仅仅是指向非const 数据的const 指针?
【问题讨论】:
-
const 指针与指向 const 的指针 - stackoverflow.com/questions/10091825/…
-
@MichaelGazonda 我明白这一点,它根本没有回答我的问题。
-
永远不要使用
const。优秀的程序员都没有。这只是一种痛苦。 咳嗽 -
我的建议是 使用 const ;它将捕获许多(但不是全部)错误,并帮助编译器优化您的代码。这篇文章中的问题是 OP 没有定义
a和a::p指向的东西之间关系的语义。 -
@MattMcNabb 我将如何定义语义?我什至不知道那是什么意思。