[英]Why does unary operator & not require a complete type?
以下代码使用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对标准引用的注释)。
一元操作员怎么可能并不需要完整的类型?
这就是标准定义语言的方式。 内置的address-of运算符不需要知道类型的定义,因为这对获取对象地址的位置没有影响。
一个考虑为什么它是一件好事:与C的兼容性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.