没有参数的函数的c ++显式关键字
可能重复:
C ++中的显式关键字是什么意思?
有没有理由使用explicit
关键字的功能,不接受任何参数? 它有什么作用? 我想知道,因为我刚刚碰到线
explicit char_separator()
靠近记录boost :: char_separator的页面末尾(http://www.boost.org/doc/libs/1_47_0/libs/tokenizer/char_separator.htm),但在此处不再进行解释。
阅读成员的解释:
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
关键字的默认构造函数与不使用此关键字相同。