影響

2013-03-23 9 views
9

は、次の構文の実際の効果は何ですか:影響

class Base { /* ... */ }; 

template<class T> 
class Derived : public T { /* ... */ }; 

int main() { 
    Derived<const Base> d; 
    // ... 
} 

Derivedクラスは唯一Baseのインタフェースのconst -partへのアクセス権を持っていますか?私の最初のテストは、実際には全く効果がないことを示しています。どうして?

ありがとうございます!あなたは

class Derived : public const Base 

プログラムdoesn't compileを書くしようとするので、

+0

私は答えはここにあると、思う:http://stackoverflow.com/a/13435319/945183 –

+0

私はこれらの質問は別のものを指すと思う:リンクされたものは、テンプレートについて*の*宣言されていますフォーム 'テンプレート構造体テスト; 'と私の質問はテンプレートのインスタンス化*の適用されるパラメータは' const'型です。 – phlipsy

答えて

2

私の推測では、constが無視されるということです。 EDIT

「のtypedef名(7.1.3)名クラス型、又はCV-:

frozenkoiコメントで標準の要部を示しましたclass-nameが必要な場合にcv修飾クラス型を指定するtypedef-nameが使用されている場合、cv修飾子は無視されます。typedef-nameは、クラス頭の識別子。 §9.1

+0

あなたはそうです、明示的に書くことはできません。私はそれが 'void func(){return void();のようなものだと思います。 } ' - それを明示的に書くことは全く役に立たないが、コーナーケースとして重要なテンプレートの文脈の中で。 – phlipsy

+0

私は、クラス宣言で無視されるよりも型を宣言するときに無視される 'const'ともっと関係があると思います。 (手元のC++標準はありませんが)これらの行に沿っています: "テンプレートパラメータの最上位のcv修飾子は型を決定する際に無視されます。" – frozenkoi

+1

これは単なる構文上の問題なので、私は確信していません。これはコンパイルされます:http://ideone.com/ik41t3 –

関連する問題