Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 暗黙的および明示的な型指定 | テンプレートの使用
C++テンプレート

book暗黙的および明示的な型指定

メニューを表示するにはスワイプしてください

暗黙的な型指定

ほとんどの場合、C++コンパイラは関数に渡された引数からテンプレート型を自動的に判別します。パラメータ型が必要な情報をすべて提供している場合、型を明示的に指定する必要はありません。

main.cpp

main.cpp

copy
12345678910111213
#include <iostream> template<typename T> void PrintValue(T value) { std::cout << value << std::endl; } // The compiler assigns the type for `T` // Based on the type of the passed argument `value` int main() { PrintValue(42); // `T` is deduced as `int` PrintValue(3.14); // `T` is deduced as `double` PrintValue("Hello"); // `T` is deduced as `const char*` }

コンパイラは関数引数に基づいてテンプレートパラメータ T の型を自動的に判別します。これにより、関数呼び出しが簡潔で読みやすくなります。このため、実際には気付かないうちにテンプレートを使用している場合もあります。

main.cpp

main.cpp

header.h

header.h

copy
123456789101112
#include <iostream> int main() { int a = 300; int b = 200; // `std::swap` is actually a template and you can prove it // Try to specify `int` type explicitly `std::swap<int>` std::swap(a, b); std::cout << a << " " << b << std::endl; }

明示的な型指定

これまでの内容を踏まえて、疑問が生じます。型推論が暗黙的に行われるのであれば、なぜ明示的に型を指定する必要があるのでしょうか? これは、自動型推論が機能しない、または十分でない場合があり、その際にはテンプレート型を明示的に指定する必要があるためです。例を見てみましょう。

ambiguous.cpp

ambiguous.cpp

forcing_type.cpp

forcing_type.cpp

no_parameters.cpp

no_parameters.cpp

copy
12345678910
#include <iostream> template<typename T> T GetDefaultValueSum(T a, T b) { return a + b; } int main() { // If `float` won't be specified, this code would generate an error std::cout << GetDefaultValueSum<float>(2, 2.5) << std::endl; }
question mark

次のコードのプレースホルダー ___ を置き換える際の誤った選択肢はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  2

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 2.  2
some-alt