typeof_unqual
、 __typeof_unqual__
(C23)
C23 標準の新機能である typeof_unqual
演算子は、 const
、 volatile
、 restrict
などの修飾子を破棄した後に式の型を返す単項演算子です。 型宣言、型キャスト、型チェックなどで使用できます。 変数、関数、または任意の C 式の型を取得します。
__typeof_unqual__
キーワードは、typeof_unqual
と同じ機能を提供する Microsoft 固有の拡張機能です。 __typeof_unqual__
キーワードは、(/std:clatest
だけでなく) すべてのバージョンの C でコンパイルするときに使用できるtypeof_unqual
とは異なり、__typeof_unqual__
をサポートする他のコンパイラ間でのコードの移植が容易になる場合があります。
typeof_unqual
の構文
typeof_unqual(type)
typeof_unqual(constant-expression)
__typeof__unqual(constant-expression)
typeof_unqual
の例
この例では typeof_unqual()
を使用していますが、 __typeof_unqual__
を使用する場合の動作は同じです。
// Compile with /std:clatest and /experimental:c11atomics
#include <stdatomic.h>
// A function that takes an atomic int pointer, but uses a non-atomic copy of the value
void func(_Atomic(int) * pAtomic)
{
typeof_unqual(*pAtomic) local = *pAtomic;
// Use local non-atomic copy of value
}
int main()
{
int* const cpVar1 = 2;
typeof_unqual(cpVar1) pVar2 = 3;
pVar2 = 4; // no error because pi is not const. cpVar1 = 4 would be an error.
_Atomic(int)i = 42;
func(&i);
return 0;
}
要件
Visual Studio 17.9 以降、または cl.exe
バージョン 19.39.33428 以降が必要です。
typeof_unqual
を使用するには、/std:clatest
でコンパイルします。