문제

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