答えて
号
§14.1 [temp.param] p5
[...]そのタイプを決定するときテンプレートパラメータの最上位CV-修飾子が無視されます。
私は、これが標準の迅速な検索を行うことが見つかりました:
template<const short cs> class B { };
template<short s> void g(B<s>);
void k2() {
B<1> b;
g(b); // OK: cv-qualifiers are ignored on template parameter types
}
コメントは、それらが無視されていると言います。
テンプレートパラメータにconst
を使用しないことをお勧めします。これは、暗黙のものでもなく、const
とは異なる定数式です。
コメントは規範的ではありません。 –
int
の選択は、おそらく悪い考えだった、それはしかし、ポインタのための違い:
class A
{
public:
int Counter;
};
A a;
template <A* a>
struct Coin
{
static void DoStuff()
{
++a->Counter; // won't compile if using const A* !!
}
};
Coin<&a>::DoStuff();
cout << a.Counter << endl;
他の人の答えを信じるならば、私のコンパイラ(GCC 4.6.1/ubuntu)と標準ではうんざりしているようです。/ –
心配する必要はありません。私は標準を誤解しているかもしれません。そして、@ Pubbyの答えは、テンプレートと一致するときに無視されることを示しています。 – Xeo
'const A *'は 'const *'の 'const'修飾バージョンではありません。それは無関係のタイプです。 'A * const'は' A * 'の' const'修飾バージョンです。 –
- 1. なぜ[:] = 1は[:] = '1'と根本的に異なるのですか? <code>a</code>が<code>['1']</code>ある最初のケースで</p> <pre><code>a = [] a[:] = '1' </code></pre><p>と</p> <pre><code>a = [] a[:] = 1 </code></pre><p>:
- 2. Ninjectコンテキストは、私は一般的なインタフェース<code>IRepository<T></code>との2つの実装<code>xrmRepository<T></code>と<code>efRepository<T></code></p> <p>を持っているワット/オープンジェネリック
- 3. カスタムコンパレータ<int型、ペア<int, int>>
- 4. argv []をintとしてどのように取得できますか?私はこれを行う</p> <pre><code>int main (int argc, char *argv[]) { printf("%d\t",(int)argv[1]); printf("%s\t",(int)argv[1]); } </code></pre> <p>とシェルで:
- 5. この一時参照は十分に長く存続しますか?</p> <pre><code>template <typename T> T const & foo(T const & dflt) { return /* ... */ ? /* ... */ : dflt; } int x = foo(5); </code></pre> <p>で
- 6. 建設中の初期化?私は<code>a(c), b(a)</code>として<code>a</code>で<code>b</code>の初期化についてはよく分からない、今</p> <pre><code>struct A{ int a; int b; A(int c): a(c), b(a){ } }; int main() { A b(10); } </code></pre> <p>:
- 7. は、暗黙的変換が</p> <pre><code>struct A { int val = 42; operator int() const { return val; } </code></pre> <p>ので、私はこのようにそれを使用することができますintにのは、私が指定したクラスAがあるとしましょうタイプ
- 8. "クラスA:B <C>"と "クラスA <T>:B <T>のT:C"の違いは何ですか?
- 9. なぜコンストラクタは一度だけ呼び出されますか?私は出力を取得しています</p> <pre><code>class A { public: A(int i) { cout<<"Called"<<endl; } }; int main() { vector<A> v(5,A(1)); return 0; } </code></pre> <p>:
- 10. <string int>をファイルに書き込む - 'operator <<'と一致しないものはありません
- 11. constポインタをintに宣言しますか?</p> <pre><code>int* p1; // pointer to int const int* p2; // pointer to constant int int* const p3; // constant pointer to int const int* const p4; // constant pointer to constant int </code></pre> <p>とDに:私たちは、次のしているC++では
- 12. buidの表現式<Func<T,bool>>式<Func<T>より
- 13. 適切なストレージ値のタイプを取得していますか?</p> <pre><code>struct Base {} template<typename T> struct Box : Base { template<typename... Args> Box(Args&&... args) : t(forward<Args>(args)...) {} T t; } </code></pre> <p>をそして、我々は関数MakeBoxがあります:
- 14. エルム -</p> <pre><code>a : Float </code></pre> <p>方法1が式を正しく</p> <pre><code>Mouse.x - a </code></pre> <p>を書くと考えるシグナルと数字
- 15. Collections.sort()の宣言:</p> <pre><code>public static <T extends Comparable<? super T>> void sort(List<T> list) </code></pre> <p>及びません:<? super T>ではなく<T>
- 16. .CreateObjectSet <T>、.Set <T>、および.CreateQuery <T>の違いは?
- 17. Heredoc <<<または<<?
- 18. マップ全体の一般的なキーイング:地図<T,K>から地図<K,V>と<T,V>
- 19. サブセット推論NP完了?</p> <p>がありますあなたがそれらを見ることができませんN.</p> <p>番号1〜Nのコインですが、フォームのそれらについてMの事実を与えられている:</p> <pre><code>struct Fact { set<int> positions int num_heads } </code></pre> <p><code>positions</code>
- 20. <Int> == <String>
- 21. など</p> <pre><code>1 int a; 2 MyC b; 3 YourC c; </code></pre> <p>、日食
- 22. Rust Lifetimes with mpsc :: Sender <T<'a>>スレッドとスレッド
- 23. ベクトル<int> v(istream_iterator <int>(cin)、istream_iterator <int>());
- 24. if(a-b <0)とif(a <b)の違い
- 25. `(T *)0 - (T *)0`はよく定義されていますか?予想通り<a href="http://ideone.com/7addql" rel="nofollow">ideone</a>で</p> <pre><code>#include <iostream> int main() { int *a = 0, *b = 0; std::cout << (a - b); } </code></pre> <p>このコードを印刷0、私はそれが明確に定義された行動かどうかわからない:
- 26. コンパイラエラー `<<"
- 27. aspxの<%:と<%=と<%#の違いは何ですか?
- 28. cout << coutとcout <<とcoutの違いは何ですか?
- 29. なぜフォーオールですか? Intのサブタイプとは見なされませんが、forall型の式を使用できます。 Int型のどこでも期待されていますか?</p> <pre><code>a :: forall a. a a = undefined b :: Int b = a </code></pre><p>即ち:
- 30. std :: is_signedの相違点<T>とstd :: numeric_limits <T> :: is_signed?
これは 'typename'パラメータの種類だけですか? (私の答えを見てください)。私は標準にアクセスすることができず、私の草案で有益な情報を見つけるのは悪いです。 –
@ J.N .:いいえ、この引用符は具体的には非型テンプレートパラメータを参照しています(あなたは 'const typename'を使用することはできません:P)。 – Xeo
+1受け入れられた答えよりも多くの票を獲得しています。 – ApprenticeHacker