让我们考虑一个具有重载一元运算符 & (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 &
,因为它使代码更加错误且难以理解。还是有其他原因?
原文由 Mihran Hovsepyan 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用
std::addressof
函数(或boost::addressof
pre C++11)。无论如何,重载一元 & 是非常可疑的。为什么要这样做而不是使用返回数据地址的命名函数?