Поделиться через


typeof_unqual, __typeof_unqual__ (C23)

Новый в стандарте C23 оператор является унарным оператором, typeof_unqual который возвращает тип выражения после отмены квалификаторов, таких как const, volatileи restrict. Его можно использовать в объявлениях типов, приведения типов, проверки типов и т. д. Он получает тип переменной, функции или любого выражения C.

Ключевое __typeof_unqual__ слово — это расширение, определенное корпорацией Майкрософт, которое предоставляет те же функции, что typeof_unqualи . Ключевое __typeof_unqual__ слово отличается только от typeof_unqual того, что оно доступно при компиляции для всех версий C (а не только /std:clatest) и может упростить перенос кода между другими компиляторами, которые поддерживают __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помощью .

См. также

/std (определение стандартной версии языка)