【发布时间】:2011-08-23 14:45:30
【问题描述】:
我想知道以下是否是未定义的行为
// Case 1:
int *p = 0;
int const *q = *const_cast<int const* const*>(&p);
// Case 2: (I think this is the same)
int *p = 0;
int const *const *pp = &p;
int const *q = *pp;
通过读取int* 就像它是int const* 一样,这是未定义的行为吗?我认为这是未定义的行为,但我之前认为通常只添加const 是安全的,所以我不确定。
【问题讨论】:
-
你在问我们! :-) 作为一个有趣的问题,你有这个真实世界的用例吗?和你一样,我一直认为添加 constness 不会破坏任何东西。
-
@unapersson 啊,我刚刚阅读了最后一个 c++0x 规范,结果证明它有答案!我今天和我的同事讨论了这个问题,他将“const”添加到“T”作为“T*”作为插入器适配器,并遇到了一个请求这种隐式转换的问题。
-
我认为这完全没问题,我在这里没有看到任何危险。
-
你的意思是暗示传递,例如将
double*转换为采用double const*的函数会导致UB?如果这是真的,我会很惊讶 -
@ildjarn:一个相关的问题是将转换后的
double **传递给采用double const**的函数是否是UB(当该函数使用它时),但您给出的示例不是这是UB。如果这甚至是UB,我的意思是。
标签: c++ const-cast