8

{a} のような式が予期しない暗黙的な変換にならないようにするために、明示的な init-list ctor を使用できますか? そして別の考え:私はそれについて心配する必要がありますか?単純に と書く{a}よりは間違いである可能性は低くなりますが、a一方で、暗黙の変換によってオブジェクトを構築していることは、コードからはまだ明確ではない場合があります。

class Foo
{
    explicit Foo (std::initializer_list<Bar> ilist) { /*...*/}
};
4

2 に答える 2

3

それはいけません。予期しない暗黙の変換が発生します。

ただし、予期しない暗黙の変換は許可されず、コンパイラはプログラムを拒否します。ただし、コンパイラがそれを選択または検討するのを止めることはありません。例

 void f(Foo);
 void f(std::vector<Bar>);

 int main() {
   // ambiguous
   f({bar1, bar2, bar3});
 }
于 2013-02-11T22:15:55.143 に答える
0

確かにできます。本当に必要かどうかは状況によりますが、一般的には稀だと思います。

于 2013-02-11T03:17:45.060 に答える