To pytanie dotyczy poprzedniego standardu C++ 11 (C++ 03). explicit
zapobiega niejawnym konwersjom z jednego rodzaju do drugiego. Na przykład:Czy potrzebne jest jednoznaczne słowo kluczowe w przypadku konstruktora przyjmującego więcej niż jeden parametr?
struct Foo
{
explicit Foo(int);
};
Foo f = 5; // will not compile
Foo b = Foo(5); // works
Jeśli mamy konstruktor, że trwa dwa lub więcej parametrów, co będzie explicit
zapobiec? Rozumiem, że w C++ 11 zostały usztywnione inicjalizacji, więc będzie to zapobiec konstrukcje takie jak:
struct Foo
{
explicit Foo(int, int);
};
Foo f = {4, 2}; // error!
Ale w C++ 03 nie zostały usztywnione inicjalizacji, więc jaki rodzaj budowy jest explicit
zapobieganie słowom kluczowym tutaj?
AFAIK absolutnie nic. Po prostu łatwiej jest _ignore_ niż _forbid_. –
Czy ta zmiana nie zaszła w C++ 11? –
@NeilKirk Co się zmieniło? Masz na myśli to, co wskazałem w moim pytaniu (inicjalizacja klamr)? –