c++ 中关键字 explicit
通过一个简单例子就可以
class Stringer
{
Stringer(int n);
Stringer(const char* T);
};
假如有上面的一个类, 其中有个参数为整型的构造器, n表示Stringer分配n个char长度的字符。下面如果有下面的语句:
Stringer str = 10;
事实上, 我们是希望字符串为10, 但是这个语句会发生隐形转换:
Stringer str = Stringer(10);
最后产生的结果不是我们期望的产生字符串“10”,而是产生了分配了10个字符长度的字符串。
针对这种情况, 我们只要如下写:
explicit Stringer (int n);
那么在编译的时候, 如果有 类似 String str = 10 这样的写法, 编译就会报错。
根据 google 代码规范中规定,所有但参数构造函数都必须是显式的, 一般拷贝构造函数也必须使用explicit