为什么重载operator&的类不能被前置声明

时间:2021-01-24 09:26:19
今天看了一下google c++的编程风格指南,其中关于重载运算符的时候,说到这么一句:重载operator&的类不能被前置声明,然后我试验的一下,编译正常,运行正常,不太明白为什么说不能前置声明,求各路大神指教一下。
ps:重载operator&的函数就是直接返回了this指针的
CTest* operator&()
{
    return this;
}

4 个解决方案

#1


是不能还是不要?

#2


坐等答案,留个标记

#3


看了http://*.com/questions/176559/you-cant-forward-declare-classes-that-overload-operator

结论还是不要,而不是不能

因为&操作符允许对没有明确定义的类进行操作,前置声明一个类并对其进行&操作时,行为是未定义的
该编译单元并不知道这个类重载了&操作符,可能会当成普通的取地址符进行操作

#4


引用 3 楼 rocktyt2 的回复:
看了http://*.com/questions/176559/you-cant-forward-declare-classes-that-overload-operator

结论还是不要,而不是不能

因为&操作符允许对没有明确定义的类进行操作,前置声明一个类并对其进行&操作时,行为是未定义的
该编译单元并不知道这个类重载了&操作符,可能会当成普通的取地址符进行操作

哦!!原来是这样子啊,那就是说重载过&操作符的类,在前置声明的时候可能会达不到自己预期的目的喽,刚刚看了一下英文原版的,是说前置声明会不安全,谢了。。。

#1


是不能还是不要?

#2


坐等答案,留个标记

#3


看了http://*.com/questions/176559/you-cant-forward-declare-classes-that-overload-operator

结论还是不要,而不是不能

因为&操作符允许对没有明确定义的类进行操作,前置声明一个类并对其进行&操作时,行为是未定义的
该编译单元并不知道这个类重载了&操作符,可能会当成普通的取地址符进行操作

#4


引用 3 楼 rocktyt2 的回复:
看了http://*.com/questions/176559/you-cant-forward-declare-classes-that-overload-operator

结论还是不要,而不是不能

因为&操作符允许对没有明确定义的类进行操作,前置声明一个类并对其进行&操作时,行为是未定义的
该编译单元并不知道这个类重载了&操作符,可能会当成普通的取地址符进行操作

哦!!原来是这样子啊,那就是说重载过&操作符的类,在前置声明的时候可能会达不到自己预期的目的喽,刚刚看了一下英文原版的,是说前置声明会不安全,谢了。。。