繁体   English   中英

为什么一元运算符并不需要完整的类型?

[英]Why does unary operator & not require a complete type?

以下代码使用gcc 7.2.0clang 6.0.0编译得很好。

#include <iostream>

struct stru;

void func(stru& s) {
  std::cout << &s << std::endl;
}

int main() {

}

我想知道这是怎么回事。 如果stru重载operator&()会怎么样? 编译器不应该简单地告诉像struct stru这样的前向声明。 在我看来,只有std::addressof(s)可以使用不完整的类型。

如果stru重载operator&()会怎么样?

然后未指定是否将调用重载(参见Oliv对标准引用的注释)。

一元操作员怎么可能并不需要完整的类型?

这就是标准定义语言的方式。 内置的address-of运算符不需要知道类型的定义,因为这对获取对象地址的位置没有影响。

一个考虑为什么它是一件好事:与C的兼容性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM