【发布时间】:2013-12-13 04:32:45
【问题描述】:
谁能解释为什么非单参数构造函数标记为显式编译? 据我了解,这在这里绝对是无用的关键字,那为什么编译没有错误呢?
class X
{
public:
explicit X(int a, int b) { /* ... */}
};
【问题讨论】:
-
作为一项规则,C++ 标准尝试指定尽可能统一的规则,以使语法在组合功能时尽可能地表现得不令人惊讶。所以,我认为反问应该是:有什么理由明确禁止将这样的构造函数标记为
explicit? -
伙计们,你说的是 C++11,我说的是 C++98 或 C++03,当时没有
{}初始化,没有可变参数模板等等。 . -
@FrédéricHamidi 我做到了。 OP:如果你对 C++03 的答案感兴趣,你应该明确地说出来。请注意,现在是 2013 年。
-
如今,C++ 被视为暗示“当今的当前标准”,而 C++11 似乎仅用于 C++11 问题。所以当你问问题的时候指定 C++03 是很值得的,否则大多数人会假设 C++11,即使你没有那个标签。
标签: c++ constructor explicit explicit-constructor