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使用する名前が実際のクラス名の場合は、これは機能しないことに注意してください。std::istreamあなたは、例えば、友達と簡単に誘惑することができます。こちらをご覧ください。

于 2012-07-06T14:22:51.350 に答える
1

イニシャライザリストはベースであり、クラスを検索することで見つかるため、初期化リストに修飾を含める必要はありません(正直なところ、修飾が許可されているかどうかはわかりません)。

于 2012-07-06T14:21:14.613 に答える