我如何决定是否需要addressof(x)而不是&x在获取对象的地址时?
似乎这个问题令人困惑,所以需要澄清:
addressof显然绕过了重载的地址运算符.我已经意识到了这一点.
我想知道的是:
我怎么知道这是不是我真的想做什么?(特别是在模板内部等)
是否有某种"规则"可以帮助我找出什么时候需要addressof而不是&?
毕竟,他们都返回对象的"地址",那么我什么时候使用哪个?
所有
传统上,在有关C ++的书籍中,甚至在核心准则中,自我分配保护都写为
A& A::operator=(const A& a) {
if (&a != this) {
...
}
return *this;
}
Run Code Online (Sandbox Code Playgroud)
但是在现代C ++中(自C ++-11起),我们有了std :: addressof魔术。
如果我要教给学生现代C ++的所有好处,我是否应该提倡将自赋值检查写成:
A& A::operator=(const A& a) {
if (std::addressof(a) != this) {
...
}
return *this;
}
Run Code Online (Sandbox Code Playgroud)
更笼统的问题-《核心指南》和其他地方应该走这条路吗?
有什么想法吗?评论?