答えて
号
§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. shared_ptr <T>とconst shared_ptr <const T>と
- 2. なぜ[:] = 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>:
- 3. Ninjectコンテキストは、私は一般的なインタフェース<code>IRepository<T></code>との2つの実装<code>xrmRepository<T></code>と<code>efRepository<T></code></p> <p>を持っているワット/オープンジェネリック
- 4. lambdaがcvとrefを削除するのはなぜですか?</p> <pre><code>auto f = [](const T& var){ return var; }; </code></pre> <p><code>f</code>の戻り値の型が<code>T</code>(ない<code>const T&</code>)である理由:
- 5. 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>とシェルで:
- 6. この一時参照は十分に長く存続しますか?</p> <pre><code>template <typename T> T const & foo(T const & dflt) { return /* ... */ ? /* ... */ : dflt; } int x = foo(5); </code></pre> <p>で
- 7. カスタムコンパレータ<int型、ペア<int, int>>
- 8. は、私は、これはTであっても</p> <pre><code>f(List(1,2,3), "this is a string") </code></pre> <p>ため、エラーなしで動作し、次の関数に</p> <pre><code>def f[T](l:List[T], v:T) </code></pre> <p>を持って、正確にT
- 9. 建設中の初期化?私は<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>:
- 10. "クラスA:B <C>"と "クラスA <T>:B <T>のT:C"の違いは何ですか?
- 11. は、暗黙的変換が</p> <pre><code>struct A { int val = 42; operator int() const { return val; } </code></pre> <p>ので、私はこのようにそれを使用することができますintにのは、私が指定したクラスAがあるとしましょうタイプ
- 12. どうすればpreg_replace @<a> @</a>〜<a> @</a>?
- 13. Bind const std :: pair <T, U>&std :: pairの値に<const T, U>
- 14. なぜコンストラクタは一度だけ呼び出されますか?私は出力を取得しています</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>:
- 15. buidの表現式<Func<T,bool>>式<Func<T>より
- 16. <string int>をファイルに書き込む - 'operator <<'と一致しないものはありません
- 17. 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++では
- 18. 適切なストレージ値のタイプを取得していますか?</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があります:
- 19. .net汎用メソッドIterable <T>と式<Func<T, T>>
- 20. ベクトル<shared_ptr <T>>を定数ベクトル<shared_ptr <const T>>とパラメータに渡すことはできますか?
- 21. は、私がここに<code>int</code>が<code>priority_queue</code>の外で定義されたベクトル<code>arr</code>のインデックスを格納<code>priority_queue<int, vector<int>, TCOMP></code>などのカスタム<code>priority_queue</code>を定義したいPRIORITY_QUEUE
- 22. Collections.sort()の宣言:</p> <pre><code>public static <T extends Comparable<? super T>> void sort(List<T> list) </code></pre> <p>及びません:<? super T>ではなく<T>
- 23. .CreateObjectSet <T>、.Set <T>、および.CreateQuery <T>の違いは?
- 24. なぜconst shared_ptr <const T>&const shared_ptr <T>&異なる参照カウントを表示するのですか?
- 25. マップ全体の一般的なキーイング:地図<T,K>から地図<K,V>と<T,V>
- 26. エルム -</p> <pre><code>a : Float </code></pre> <p>方法1が式を正しく</p> <pre><code>Mouse.x - a </code></pre> <p>を書くと考えるシグナルと数字
- 27. Heredoc <<<または<<?
- 28. [ClassTag [T]]が暗黙的に解決するのはなぜですか?</p> <pre><code>object App { def main(args: Array[String]) = { test[Int]() } def test[T <: Int : ClassTag]() = println(implicitly[ClassTag[T]]) } </code></pre> <p>プログラムプリント<code>Int</code>次の最も単純な例で
- 29. サブセット推論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>
- 30. Cの<と<<の違いは何ですか?
これは 'typename'パラメータの種類だけですか? (私の答えを見てください)。私は標準にアクセスすることができず、私の草案で有益な情報を見つけるのは悪いです。 –
@ J.N .:いいえ、この引用符は具体的には非型テンプレートパラメータを参照しています(あなたは 'const typename'を使用することはできません:P)。 – Xeo
+1受け入れられた答えよりも多くの票を獲得しています。 – ApprenticeHacker