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++)