C++のstd::is_voidテンプレートとは?構文と使い方を実例付きで解説
本記事では、C++ STLに含まれる std::is_void テンプレートの仕組み、構文、具体的な使用例について詳しく解説します。
is_void は、<type_traits> ヘッダーファイルで定義されているテンプレートです。このテンプレートを使うことで、指定した型 T が void 型であるかどうかをコンパイル時に判定できます。
C++におけるvoid型とは?
簡単に言えば、void は「空」や「無」を意味します。関数を void 型として宣言した場合、その関数は何も値を返さないものとみなされます。
また、void ポインタを宣言することも可能です。void ポインタは、指し示す先の型が未指定のポインタですが、参照解除(デリファレンス)を行う前に、必ず他の型へのポインタとしてキャストする必要があります。void ポインタは型に関係なくあらゆるオブジェクトを指せるため、プログラマにとって非常に便利な機能となっています。
構文
template <class T> is_void;
パラメータ
このテンプレートが受け取るパラメータは型 T のみで、T が void 型であるかどうかを判定します。
戻り値
ブール値(bool)を返します。指定された型が void 型であれば true を、そうでなければ false を返します。
使用例
入力: is_void<void>::value; 出力: true 入力: is_void<int>::value; 出力: false
サンプルコード①:基本的な型での判定
#include <iostream>
#include <type_traits>
using namespace std;
int main() {
cout << boolalpha;
cout << "checking for is_void:";
cout << "\nvoid:" << is_void<void>::value;
cout << "\nconst void:" << is_void<const void>::value;
cout << "\nint:" << is_void<int>::value;
cout << "\nchar:" << is_void<char>::value;
return 0;
}出力結果
上記のコードを実行すると、以下の出力が得られます。
checking for is_void: Void: true Const void: true Int: false Char: false
この結果から、void だけでなく const void も void 型として判定されることがわかります。一方、int や char といった通常の型は false となります。
サンプルコード②:volatile修飾子との組み合わせ
#include <iostream>
#include <type_traits>
using namespace std;
int main() {
cout << boolalpha;
cout << "checking for is_void:";
cout << "\nDouble:" << is_void<double>::value;
cout << "\nFloat:" << is_void<float>::value;
cout << "\nvolatile void:" << is_void<volatile void>::value;
cout << "\nconst volatile void:" << is_void<const volatile void>::value;
return 0;
}出力結果
上記のコードを実行すると、以下の出力が得られます。
checking for is_void: Double: false Float: false Volatile void: true Const volatile void: true
double や float は false になりますが、volatile void や const volatile void のように cv 修飾子(const / volatile)が付いた void 型も true と判定されます。is_void は最上位の cv 修飾子を無視して判定するためです。
補足:C++17以降では is_void_v が使える
C++17 以降では、変数テンプレート std::is_void_v<T> を使うことで、::value を省略してより簡潔に記述できます。
static_assert(std::is_void_v<void>, "void is void"); static_assert(!std::is_void_v<int>, "int is not void");
コンパイル時の型チェックや SFINAE、コンセプトの実装などにおいて、is_void は型特性(type traits)を活用した安全なコードを書くための基本ツールの一つです。
-
C++のvoid関数でreturnする方法|値以外を返すテクニックを解説
void関数が「void(空)」と呼ばれるのは、何も返さないためです。しかし、「void関数は何も返せない」という説明は、必ずしも正しいとは言えません。void関数から値を返すことはできませんが、値以外のものを返したり、return文を活用したりすることは可能です。本記事では、その具体的な方法をサンプルコードとともに解説します。void関数でもreturn文は使えるvoid関数は値を返すことができませんが、return文そのものを記述することは可能です。引数なしのreturn文は「この時点で関数を終了する」という意図を明示的に示す働きがあり、処理の流れが分かりやすくなるため、コードの可読性向上
-
【C++入門】デフォルトコンストラクタの基礎と使い方をわかりやすく解説
C++のコンストラクタとは コンストラクタ(constructor)とは、クラスの新しいオブジェクト(インスタンス)を生成した瞬間に自動的に実行される特殊なメンバ関数です。オブジェクトの初期化処理を記述するための仕組みで、C++プログラミングにおいて非常に重要な役割を担っています。 コンストラクタの基本ルール クラス名と完全に同じ名前を持つ 戻り値の型を持たない(voidすら指定できない) オブジェクト生成時に自動的に呼び出される 特に引数を取らないコンストラクタは「デフォルトコンストラクタ」と呼ばれる メンバ変数に初期値を設定したい場合など、コンストラクタはとても便利です。以下のサンプル