是否有理由将explicit
关键字用于不带任何参数的构造函数?它有什么作用吗?我想知道,因为我刚越过这条线
explicit char_separator()
在文档页面的末尾附近boost::char_separator
,但那里没有进一步解释。
是否有理由将explicit
关键字用于不带任何参数的构造函数?它有什么作用吗?我想知道,因为我刚越过这条线
explicit char_separator()
在文档页面的末尾附近boost::char_separator
,但那里没有进一步解释。
会员阅读说明:
explicit char_separator(const Char* dropped_delims,
const Char* kept_delims = "",
empty_token_policy empty_tokens = drop_empty_tokens)
explicit char_separator()
第一个构造函数的explicit
关键字需要显式创建 char_separator 类型的对象。
C++ 中的显式关键字是什么意思?很好地涵盖了显式关键字。
第二个构造函数的explicit
关键字是噪音,被忽略。
编辑
从 c++ 标准:
7.1.2 p6 告诉:
显式说明符只能在类声明中的构造函数声明中使用;见 12.3.1。
12.3.1 p2 告诉:
显式构造函数像非显式构造函数一样构造对象,但仅在显式使用直接初始化语法 (8.5) 或强制转换 (5.2.9, 5.4) 的情况下这样做。默认构造函数可以是显式构造函数;这样的构造函数将用于执行默认初始化或值初始化(8.5)。[例子:
class Z {
public:
explicit Z();
explicit Z(int);
// ...
};
Z a; // OK: default-initialization performed
Z a1 = 1; // error: no implicit conversion
Z a3 = Z(1); // OK: direct initialization syntax used
Z a2(1); // OK: direct initialization syntax used
Z* p = new Z(1); // OK: direct initialization syntax used
Z a4 = (Z)1; // OK: explicit cast used
Z a5 = static_cast<Z>(1); // OK: explicit cast used
——结束示例]
因此,带关键字的默认构造函数与explicit
不带 this 关键字的构造函数是一样的。