std
構造函數的調用是否需要用std::
進行限定?是否需要調用std構造函數的調用?
class whatever : public std::runtime_error
{
public:
explicit whatever(const std::string& what) : runtime_error(what) {}
}; //^do I need std:: here?
它適用於我的編譯器沒有資格,但我不確定是否該行爲是標準的。
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
和朋友。 See here.
有關「* inject-class-name *」的定義,請參閱C++ 2003,第9.2節。 – 2012-07-06 14:41:51
@Robᵩ:謝謝,我沒有我的標準。 :○ – 2012-07-06 14:45:23
無需初始化程序列表中的限定條件(說實話,我不知道是否允許該限定條件),因爲它是一個基礎,並且可以通過全班查找找到。
基本上,你問你是否可以沒有限定地參考基類(不一定是'std')? – 2012-07-06 14:18:24