2016-06-23 5 views
9

"using"キーワードについて混乱したことがあります。クラスまたは構造体を使用する場合、そのクラスまたは構造体を引数とする同じ名前空間内の関数を使用する必要はありません。以下のコードのように。C++では "using"キーワードが正確に何をしますか?

namespace A 
{ 
    struct testData 
    { 
     int x; 
    }; 

    int testFunc(testData data) 
    { 
     return data.x; 
    } 
} 

#include <cstdio>; 

using A::testData; 

int main() 
{ 
    testData test = { 1 }; 
    printf("%d", testFunc(test)); 

    return 0; 
} 

私は私だけTESTDATAのために「使用」キーワードを使用するので、私はtestFunc()を使用することを許されるべきではないと思いました。しかし、これらのコードは正常に動作します。

なぜこのように動作するのか教えてください。

+2

[引数依存ルックアップ(http://en.cppreference.com/w/cpp/language/adl)。 – BoBTFish

+0

@BoBTFishわかりました。どうもありがとう。 –

答えて

9

usingの仕組みが正しいですか。

しかし、あなたは1つのことを忘れています:引数に依存する検索。コンパイラは、testパラメータを指定してtestFuncを参照することができます。

見るhttp://en.cppreference.com/w/cpp/language/adl

+0

ありがとうございます。どうもありがとう。 –

関連する問題