【发布时间】:2011-09-18 14:45:06
【问题描述】:
让我们考虑一个具有重载一元运算符 & (Address-of) 的类。让它成为class A
template <class C>
class A
{
public:
C * operator &()
{
return &data;
}
//...
private:
C data;
}
现在我想将A 类型的指针传递给某个函数来填充它的data。让我们称之为f
void f(A * auto_containter)
{
//...
}
但很清楚为什么下面的代码不起作用(甚至无法编译)。这是因为调用了重载的运算符。
A a;
f(&a);
问题如下:
是否有任何语法可以将a 的地址传递给f?如果不是,那么对我来说很奇怪为什么允许重载一元operator &,因为它使代码更加错误且难以理解。还是有其他原因?
【问题讨论】:
-
滥用运算符重载确实使代码更难解码(因此更难理解)。就像提供的所有工具一样,不要滥用它们。
-
你要求 syntax 所以这不是答案,但你可以写
A * A::addressof() { return this; }