【发布时间】:2018-04-03 14:53:46
【问题描述】:
我想知道是否隐式转换为指向 const 数据类型的指针是在 C11 标准中定义的:
T x;
const T *p = &x;
指向T 类型对象的指针被隐式转换为指向const T 类型对象的指针。这种隐式转换是否在 C11 标准中定义? (我知道允许这样做是有意义的以及它有多么有用。我只是想知道它在标准中的定义)
此外,根据 C11 是否禁止从类型 T** 到 const T** 的隐式转换?
T *p;
const T **pp = &p;
这是一个众所周知的问题部分,因此 GCC 和 LLVM/clang 会发出警告。我仍然想知道根据 C11 标准是否允许这样做。我只在 §6.5.16.1P6 中找到一条评论,指出这应该是违反约束。但是,我看不出应该违反哪个约束。我再次知道这应该被禁止,并且这种隐式转换可能会导致微妙的问题。我只是想知道这是否是根据 C11 定义的(未)行为。
再一次,我的两个问题不是关于这是否好(这里已多次回答),而是 C11 标准如何/在何处定义这一点。
为了完整起见,这里是第二个示例有问题的原因的链接:http://c-faq.com/ansi/constmismatch.html
【问题讨论】:
-
第 6.3.2.3 节第 2 段。
标签: c constants language-lawyer