私はこのコードを持っていますか?私はそれらが同じであると思うだろうが、私は再定義の誤りがないので、明らかにそうではない。「同じシグネチャ」のテンプレートと非テンプレート関数のオーバーロードが非テンプレート関数を呼び出すのはなぜですか?</p> <pre><code>template< class T = const int & > void f(T) {} void f(const int &) {} int main() { f(0); } </code></pre> <p>は、なぜそれが二番目の代わりに、最初の呼び出しん:
18
A
答えて
19
2番目のオーバーロードはテンプレートではないためです。
関数呼び出しを解決するためにテンプレート関数と非テンプレート関数の両方が実行可能である場合、非テンプレート関数が選択されます。
C++ 11標準のパラグラフ13.3.3/1:
[...]これらの定義が与えられると、実行可能な関数F1が他の実行可能な関数F2より良好関数であると定義されますすべての引数iについて、ICSi(F1)がICSi(F2)よりも悪い変換シーケンスでない場合、[F1]は非テンプレート関数であり、F2は関数テンプレートの特殊化 [...]
6
1つはテンプレートであり、もう1つはテンプレートではないitely同じではありません。
オーバーロードの解像度は、テンプレート化された関数よりもテンプレート以外のものが優先されるように設計されています。
関連する問題
- 1. のsizeofと関数テンプレート:はsizeof対のsizeof(&F)(&F <int>)
- 2. テンプレートmake_unique <int[]>初期化子
- 3. テンプレートを特殊化<typename T、テンプレート<typename> class U>
- 4. コンパイラが関数スタックフレームに必要なスペースよりも多くの領域を予約するのはなぜですか?関数プロローグで、アセンブリコードで</p> <pre><code>void func(int a) { int x = a+2; } </code></pre><p>:
- 5. 関数の引数:それは不可能です</p> <pre><code>void foo(vector<Clazz*>& v) { ... v[0]->method(); ... } void foo(vector<Clazz>& v) { ... v[0].method(); ... } </code></pre> <p>/:ベクトル<Clazz*>&ベクトル<Clazz>&
- 6. <int(int)>は、関数テンプレートでは何を意味していますか?
- 7. ラムダ式に<functional>が必要ですが、関数<void()>が必要なのはなぜですか?
- 8. JNAからdllから受け取ったポインタのjavaからメソッドを呼び出す方法はありますか?私はこのメソッドを呼び出すことができる方法</p> <pre><code>void reset(); void hash (const byte* data, uint64 size, vector_byte& hash). </code></pre> <p>:
- 9. ヌルポインタの逆参照でセグメンテーションがないのはなぜですか?</p> <pre><code>int main() { int *p = NULL; if (p && *p); //if (*p && p); return 0; } </code></pre> <p>私はこのコードを実行し、私はこの単純なCコードを書かれている
- 10. テンプレートメンバ関数の呼び出し -</p> <blockquote> <p>TemplateTest.cpp:44:13: error:expected primary-expression before 'int'<br/> h_.handle<int>(i);</p> </blockquote> <p>ビルドコマンド:::
- 11. 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>)である理由:
- 12. カスタムコンパレータ<int型、ペア<int, int>>
- 13. Tkinter << ListboxSelect >>バインド関数を呼び出さない
- 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. この関数宣言の乱用は未定義の動作を呼び出しますか?</p> <pre><code>int main() { int exit(); ((void(*)())exit)(0); } </code></pre> <p>あなたが見ることができるように、<code>exit</code>が間違った戻り値の型で宣言されていますが、間違った関数型と呼ばれることはありません:
- 16. この一時参照は十分に長く存続しますか?</p> <pre><code>template <typename T> T const & foo(T const & dflt) { return /* ... */ ? /* ... */ : dflt; } int x = foo(5); </code></pre> <p>で
- 17. 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>とシェルで:
- 18. テンプレート関数を持つイテレータの<<演算子をオーバーロードできません。
- 19. なぜ `<< std :: endl`が呼び出したい演算子を呼び出さないのですか?
- 20. メモリ効率の良いマップ<pair <int,int>、set <int>>代替
- 21. [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>次の最も単純な例で
- 22. はC++ 14の静的なthread_localメモリ非同期シグナルsafetですか?</p> <pre><code>int my_thread_id(){ static int counter {0}; thread_local int tid{++counter}; return tid; } </code></pre> <p>も最初の呼び出しで、この機能(my_thread_id)非同期シグナルセーフです:
- 23. なぜstd :: variantはC言語でstd :: variant <int、const int>
- 24. ベクトル<int> v(istream_iterator <int>(cin)、istream_iterator <int>());
- 25. 定義、初期化、および使用方法 - ベクトル<ベクトル<ペア< int,int >、int>> v C++では?
- 26. Uncrustify:私は<code>sp_angle_shift = remove</code>を使用し、この目的のために</p> <pre><code>void Function (list<list<int> >); ^ | This space should be removed. </code></pre> <p>が、効果はありません。私は、例えば、テンプレート角の間のスペースを削除したい
- 27. テンプレートで<<をオーバーロードする:次のエラーが発生するのはなぜですか?
- 28. 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++では
- 29. C++。なぜstd :: cout << char + int int値を出力しますか?
- 30. ArrayListのCollections.sort()を呼び出せないのはなぜですか?<T>?
http://stacked-crooked.com/view?id=f9aac9532f21077433027f9ae341417bここでは番号2を呼び出します。 – Rapptz
@Rapptzはい、編集しました。 – user2030677