Can I use explicit with an init-list ctor to make sure an expression like {a} doesn't result in unexpected implicit conversion? And another thought: should I be worried about it? Writing {a}
is less likely to be a mistake than simply a
, but on the other hand, it still may not be clear from the code that we're constructing an object through implicit conversion.
class Foo
{
explicit Foo (std::initializer_list<Bar> ilist) { /*...*/}
};
You cannot. It does result in the unexpected implicit conversion.
However, the unexpected implicit conversion is disallowed and the compiler will reject your program. That however doesn't stop the compiler to select or consider it. Example
void f(Foo);
void f(std::vector<Bar>);
int main() {
// ambiguous
f({bar1, bar2, bar3});
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With