相关疑难解决方法(0)

有什么正当理由使一元运算符超载?

好吧,我受到启发,做了一些冲击.似乎超载operator&导致了不小的痛苦.

重载它有哪些合法案例?

(不能说我曾经那样做过......)

c++ operator-overloading

68
推荐指数
5
解决办法
3819
查看次数

何时使用addressof(x)而不是&x?

我如何决定是否需要addressof(x)而不是&x在获取对象的地址时?


似乎这个问题令人困惑,所以需要澄清:

addressof显然绕过了重载的地址运算符.我已经意识到了这一点.

我想知道的是:
我怎么知道这是不是我真的想做什么?(特别是在模板内部等)

是否有某种"规则"可以帮助我找出什么时候需要addressof而不是&
毕竟,他们都返回对象的"地址",那么我什么时候使用哪个?

c++ addressof

60
推荐指数
5
解决办法
7324
查看次数

我们应该采用新的自我分配保护方式吗?

所有

传统上,在有关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)

更笼统的问题-《核心指南》和其他地方应该走这条路吗?

有什么想法吗?评论?

c++ standards c++11 c++17

-2
推荐指数
1
解决办法
146
查看次数

标签 统计

c++ ×3

addressof ×1

c++11 ×1

c++17 ×1

operator-overloading ×1

standards ×1