std
构造函数的调用是否需要用std::
限定?
class whatever : public std::runtime_error
{
public:
explicit whatever(const std::string& what) : runtime_error(what) {}
}; // ^ do I need std:: here?
它适用于没有限定条件的编译器,但我不确定这种行为是否是标准的。
不,
你没有。初始值设定项列表中的名称在 whatever
类的作用域中查找。此类作用域包括在基类中声明的名称,基类的名称(runtime_error
)入到std::runtime_error
的作用域中(这是所有类的标准行为)。
请注意,如果您使用的名称是实际类名的typedef
,则这不起作用。你很容易被诱惑,例如,std::istream
和朋友。看这里。
初始化项列表中不需要限定条件(老实说,我不知道那里是否允许该限定),因为它是一个基础,可以通过查找类找到。