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

时间:2012-07-06 14:17:00

标签: c++ exception inheritance constructor namespaces

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

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

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

2 个答案:

答案 0 :(得分:7)

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

请注意,如果您使用的名称是实际类名的typedef,则此方法无效。你很容易受到诱惑,例如std::istream和朋友。 See here.

答案 1 :(得分:1)

初始化列表中不需要资格认证(说实话我不知道资格是否允许在那里),因为它是一个基础,可以通过在类中查找来找到。