是否需要对std构造函数的调用进行限定?

fre*_*low 8 c++ inheritance constructor namespaces exception

是否std需要对构造函数的调用进行限定std::

class whatever : public std::runtime_error
{
public:
    explicit whatever(const std::string& what) : runtime_error(what) {}
};                                            // ^ do I need std:: here?
Run Code Online (Sandbox Code Playgroud)

它在没有资格的情况下适用于我的编译器,但我不确定这种行为是否是标准的.

CB *_*ley 7

不,你没有.初始化列表中的名称在whatever类的范围内查找.此类作用域包括在基类中声明的名称,并且基类(runtime_error)的名称将插入到作用域中std::runtime_error(这是所有类的标准行为).

请注意,如果您使用的名称是typedef实际类名称,则此方法不起作用.你很容易受到诱惑,例如std::istream和朋友.看这里.