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



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和朋友。看这里。

初始化项列表中不需要限定条件(老实说,我不知道那里是否允许该限定),因为它是一个基础,可以通过查找类找到。

最新更新