没有参数的函数的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关键字的默认构造函数与不使用此关键字相同。

链接地址: http://www.djcxy.com/p/24549.html

上一篇: c++ explicit keyword for function without arguments

下一篇: Logging array indices, not values (JavaScript)