的兼容性
以下代码与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。