Sev*_*eux -2 c++ standards c++11 c++17
所有
传统上,在有关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)
更笼统的问题-《核心指南》和其他地方应该走这条路吗?
有什么想法吗?评论?
std::addressof 适用于通用代码。
在通用代码中,operator&与您交互的类型可能会使一元代码过载。而且,如果您想要真实的地址,那将不会。
在非通用代码中,operator&重载既罕见又是病态的。任何operator&在类型上重载的人都将使该类型变得非常怪异,并且无论如何都要审核它的每次使用。
一元operator&重载的使用已不受欢迎-甚至伪com智能指针也已摆脱习惯。我最近看到的唯一用法是有人编写产生函数对象之类的表达式。
几乎毫无意义的冗长并不是一件好事。
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |