2012-07-06 73 views
8

std構造函數的調用是否需要用std::進行限定?是否需要調用std構造函數的調用?

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

它適用於我的編譯器沒有資格,但我不確定是否該行爲是標準的。

+1

基本上,你問你是否可以沒有限定地參考基類(不一定是'std')? – 2012-07-06 14:18:24

回答

7

不,你不知道。初始化程序列表中的名稱在whatever類的範圍內查找。此類作用域包括在基類中聲明的名稱,基類的名稱(runtime_error)被插入到std::runtime_error(這是所有類的標準行爲)的作用域中。

請注意,如果您使用的名稱是實際類名稱的typedef,則不起作用。你很容易被誘惑,例如,std::istream和朋友。 See here.

+1

有關「* inject-class-name *」的定義,請參閱C++ 2003,第9.2節。 – 2012-07-06 14:41:51

+0

@Robᵩ:謝謝,我沒有我的標準。 :○ – 2012-07-06 14:45:23

1

無需初始化程序列表中的限定條件(說實話,我不知道是否允許該限定條件),因爲它是一個基礎,並且可以通過全班查找找到。