2017-03-02 8 views
1

名前空間がinlineと定義されている場合は、拡張名前空間inlineも同様に宣言する必要がありますか?言い換えれば、インラインになるように名前空間を宣言し、拡張宣言で修飾子を省略することは許されていますか?インラインであることをnamespcesを修飾する必要ありませんですインラインネームスペースは常にそのように修飾されていなければなりませんか?

:私が見つけたものコンパイラ(G ++ 4.9.2):)だから、

-

+0

これはまた、回答されていませんが[こちら](http://stackoverflow.com/questions/11016220/what-are-inline-namespaces-for)で尋ねられます –

答えて

0

は私が最高顧問を依頼する機会がありました拡張の定義。名前空間の型は、定義宣言(=コンパイラが最初に見たもの)で修正されているようです。その後の資格は単に無視されます。したがって、ある人が拡張のdefenitionで名前空間をインライン化しようとすると、コンパイラは特別な警告を出すことはなく、単にクラス/関数の宣言がないことに不平を言うだけです。

拡張名空間を修飾するかどうかはアプリケーションによって異なります。私の場合、継承によって保証された階層が含まれているので、必要ではありません。これが当てはまらない場合は、ヘッダファイルのインラインネームスペースを修飾するのは良い考えであるかもしれません。なぜなら、どの宣言が定義されているのかわからないからです。

+0

これは標準に近いものですが、正確ではありません; [\ [namespace.def \]/5](http://eel.is/c++draft/namespace.def#5)を参照してください。 – bogdan

関連する問題