在C ++标准§13.3.1.7[over.match.list]中,陈述如下: 在复制列表初始化中,如果selectexplicit构造函数,则初始化是不合格的。 这就是我们无法做到的原因,例如: struct foo { // explicit because it can be called with one argument explicit foo(std::string s, int x = 0); private: // … }; void f(foo x); f({ "answer", 42 }); (请注意,这里发生的不是一个转换 ,即使构造函数是“隐式的”也不会是一个,这是直接使用构造函数初始化一个foo对象,除了std::string ,没有转换这里。) 这对我来说似乎很好。 没有办法,隐式转换会咬我。 如果{ "answer", 42 }可以初始化别的东西,编译器就不会背叛我,做错了事情: struct bar { // explicit because it can be called with […]
使explicit多个参数构造函数有任何(有用的)效果? 例: class A { public: explicit A( int b, int c ); // does explicit have any (useful) effect? };
我有一个类private char str[256]; 为此我有一个明确的构造函数: explicit myClass(const char *func) { strcpy(str,func); } 我把它称为: myClass obj("example"); 当我编译这个时,我得到以下警告: 不推荐将string常量转换为“char *” 为什么发生这种情况?
有人在C ++中发布了关于explicit关键字含义的另一个问题的评论。 那么,这是什么意思?