S s = {};
と同じになると期待して、コードS s;
... s = {};
を書きました。しかし、それはしませんでした。次の例は、問題を再現:オーバーロードの解決:空の中括弧の割り当て
#include <iostream>
struct S
{
S(): a(5) { }
S(int t): a(t) {}
S &operator=(int t) { a = t; return *this; }
S &operator=(S const &t) = default;
int a;
};
int main()
{
S s = {};
S t;
t = {};
std::cout << s.a << '\n';
std::cout << t.a << '\n';
}
出力は次のようになります。
5
0
私の質問は以下のとおりです。
operator=(int)
代わりに "曖昧" や他の一つで、ここで選択された理由?- きちんとこの問題を回避するには、
S
を変更せずに、ありますか?
私の意図はs = S{};
です。それがうまくいくなら、s = {};
を書くことは便利だろう。私は現在s = decltype(s){};
を使用していますが、タイプまたは変数名を繰り返さないようにしたいと考えています。
'{}'〜 'int'はアイデンティティの変換です([\ [over.ics.list \]/9)(http://eel.is/c++draft/over.ics.list#9 ))。 '{} 'はユーザー定義の変換([\ [over.ics.list \]/6)(http://eel.is/c++draft/over.ics.list#6)です。 )。私は昨日非常に似たような質問をしたことを誓っています... –
@ T.C。もしそうなら、私は昨日より多くの質問を読んで、自分自身でいくつかの開発時間を節約できたと思います! –
私は自分のコードで同じミスを繰り返したようです。私は通常、void clear(){* this = {};を使用します。 } 'オブジェクトをその値で初期化された状態に戻すことを意図している –