8

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

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

它可以在没有资格的情况下在我的编译器上运行,但我不确定这种行为是否是标准的。

4

2 回答 2

7

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

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

于 2012-07-06T14:22:51.350 回答
1

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

于 2012-07-06T14:21:14.613 回答