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});
 }

其他提示

You certainly can. Whether you should really depends on the situation, although I think it would be rare in general.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top