在此代码中,声明了一个引用并将其初始化为通过取消引用空指针获得的值:
int &nullReference = *(int*)0;
虽然根据编译器行为它可能看起来有效,但必须了解引用与指针。
根据 C 标准 (8.3.2/1):
“引用应初始化为引用有效的对象或函数...特别是空引用不能存在于定义明确的程序中。”
这强调了空引用,即不引用任何有效对象的引用,在 C 语言中不是一个定义明确的概念.
此外,标准 (1.9/4) 指出“取消引用空指针的效果”未定义。在这种情况下,如果我们有一个使用空指针初始化的引用,则意味着取消引用空指针本身,这是显式未定义的行为。
因此,虽然代码可以在没有警告的情况下编译,但它是无效的C 代码应该避免。空引用在语言中不是一个有效的概念,任何创建空引用的尝试都将导致未定义的行为。
以上是C 引用可以为空吗?的详细内容。更多信息请关注PHP中文网其他相关文章!