std
构造函数的调用是否需要使用std::
进行限定?
class whatever : public std::runtime_error
{
public:
explicit whatever(const std::string& what) : runtime_error(what) {}
}; // ^ do I need std:: here?
它在没有资格的情况下适用于我的编译器,但我不确定该行为是否是标准的。
答案 0 :(得分:7)
不,不。初始化列表中的名称在whatever
类的范围内查找。此类作用域包括在基类中声明的名称,并且基类的名称(runtime_error
)被插入到std::runtime_error
的作用域中(这是所有类的标准行为)。
请注意,如果您使用的名称是实际类名的typedef
,则此方法无效。你很容易受到诱惑,例如std::istream
和朋友。 See here.
答案 1 :(得分:1)
初始化列表中不需要资格认证(说实话我不知道资格是否允许在那里),因为它是一个基础,可以通过在类中查找来找到。