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


static_assert

Проверяет утверждения программного обеспечения во время компиляции.Если указанный константное выражение falseкомпилятор отображает заданное сообщение и происходит сбой компиляции с ошибкой. в противном случае, объявление не влияет.

static_assert( 
    constant-expression, 
    string-literal 
);

Параметры

Параметр

Описание

constant-expression

Объединенный константное выражение, которое можно преобразовать в логическое значение.

Если вычисленное выражение нулевой (false) string-literal отображается параметр и происходит сбой компиляции с ошибкой.Если выражение ненулевое значение (true) static_assert объявление не имеет никакого эффекта.

string-literal

Сообщение, которое отображается, если constant-expression параметр равен нулю.Сообщение строка символов базовый набор символов компилятора; то есть нет multibyte или расширенные символы.

Заметки

constant-expression параметр - a static_assert объявление представляет a утверждение программного обеспечения.Утверждение программного обеспечения задает условие, которое ожидается, что выполнены в определенной точке в программе.Если условие равно true, static_assert объявление не имеет никакого эффекта.Если условие равно false, то утверждение не выполняется, компилятор выводит сообщение in string-literal параметр, и происходит сбой компиляции с ошибкой.

static_assert объявление проверяет утверждения программного обеспечения во время компиляции.Напротив, assert (CRT) макрос проверяет утверждения программного обеспечения во время выполнения и приводит затраты времени выполнения в пространстве или времени.static_assert объявление особенно полезно для отладки шаблоны, так как аргументы шаблонов можно включить в constant-expression параметр.

компилятор рассматривает static_assert объявление для синтаксических ошибок, когда объявления станет обнаружено.Компилятор вычисляет constant-expression параметр немедленно, если он не зависит от параметра шаблона.В противном случае, компилятор вычисляет constant-expression параметр, если шаблон создан экземпляр.Таким образом, компилятор может вызов диагностическое сообщение раз, когда объявления станет обнаруживается, и еще раз, когда шаблон будет создан экземпляр.

Можно использовать static_assert ключевое слово в пространстве имен, классе или области блока.( static_assert ключевое слово технически объявление, даже если он не вводит новое имя в программу, так как его можно использовать в области пространства имен.)

Описание

В следующем примере static_assert объявление есть область пространства имен.Поскольку компилятор знает размер типа void *выражение вычисляется немедленно.

Пример

static_assert(sizeof(void *) == 4, "64-bit code generation is not supported.");

Описание

В следующем примере static_assert объявление есть область класса.static_assert проверяет, что параметр шаблона a простые старые данные тип (СТРУЧКА).компилятор рассматривает static_assert объявление, когда он объявлен, но не вычисляет constant-expression параметр значение basic_string шаблон создан внутри класса main().

Пример

#include <type_traits>
#include <iosfwd>
namespace std {
template <class CharT, class Traits = std::char_traits<CharT> >
class basic_string {
    static_assert(tr1::is_pod<CharT>::value,
                  "Template argument CharT must be a POD type in class template basic_string");
    // ...
    };
}
struct NonPOD {
    NonPOD(const NonPOD &) {}
    virtual ~NonPOD() {}
};
int main()
{
    std::basic_string<char> bs;
}

Описание

В следующем примере static_assert объявление имеет область действия блока.static_assert проверяет, что размер структуры VMPage равен виртуальной памяти pagesize системы.

Пример

#include <sys/param.h> // defines PAGESIZE
class VMMClient {
public:
    struct VMPage { // ... 
           };
    int check_pagesize() {
    static_assert(sizeof(VMPage) == PAGESIZE,
        "Struct VMPage must be the same size as a system virtual memory page.");
    // ...
    }
// ...
};

См. также

Ссылки

Утверждение и Пользователь- Предоставленных сообщения (C++)

директива #error (C/C++)

assert (CRT)

Кодировка ASCII

Объявления

Другие ресурсы

Шаблоны