Static Assertion

来自cppreference.com
< cpp‎ | language

 
 
C++语言
表达式
替代表示
字面量
布尔型 - 整型 - 浮点型
字符型 - 字符串 - nullptr (C++11)
用户定义 (C++11)
Utilities
属性 (C++11)
Types
typedef声明
类型别名声明 (C++11)
Casts
隐式类型转换 - 显示类型转换
static_cast - dynamic_cast
const_cast - reinterpret_cast
内存分配
类特有的函数属性
explicit (C++11)
static
静态成员函数
模板
杂项
 
执行编译时断言检查
原文:
Performs compile-time assertion checking
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

目录

[编辑] 语法

static_assert ( bool_constexpr , string ) (C++11 起)

[编辑] 解释

  • bool_constexpr一个布尔常量表达式进行评估
    原文:
    bool_constexpr a boolean constant expression to be evaluated
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • string字符串文字,会出现编译错误,如果bool_constexpr是假的
    原文:
    string string literal that will appear as compiler error if bool_constexpr is false
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 示例

#include <type_traits>
 
template<class T>
    void swap( T& a, T& b)
    {
        static_assert(std::is_copy_constructible<T>::value,
                      "Swap requires copying");
 
        auto c = b;
        b = a;
        a = c;
    }
 
template<class T>
    struct data_structure
{
    static_assert(std::is_default_constructible<T>::value,
                  "Data Structure requires default-constructible elements");
 
};
 
struct no_copy
{
    no_copy ( const no_copy& ) = delete;
    no_copy () = default;
};
 
struct no_default
{
    no_default ( ) = delete;
};
 
int main()
{
    int a, b;
    swap(a,b);
 
    no_copy nc_a, nc_b;
    swap(nc_a,nc_b); // 1
 
    data_structure<int> ds_ok;
    data_structure<no_default> ds_error; // 2
}

Possible output:

1: error: static assertion failed: Swap requires copying
2: error: static assertion failed: Data Structure requires default-constructible elements

[编辑] 另请参阅