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



以下代码与GCC 7.2.0和clang 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的标准报价评论(。

一级操作员怎么能&amp;不需要完整的类型吗?

这就是标准定义语言的方式。内置的操作员不需要知道该类型的定义,因为这对获取对象的地址没有影响。

考虑到为什么是一件好事的一个考虑:与c。

的兼容性

最新更新