静态断言 (自 C11 起)
来自 cppreference.com
内容 |
[编辑] 语法
_Static_assert ( 表达式 , 消息 ) |
(自 C11 起)(在 C23 中已弃用) | ||||||||
static_assert ( 表达式 , 消息 ) |
(自 C23 起) | ||||||||
_Static_assert ( 表达式 ) |
(自 C23 起)(在 C23 中已弃用) | ||||||||
static_assert ( 表达式 ) |
(自 C23 起) | ||||||||
表达式 | - | 任何 整型常量表达式 |
消息 | - | 任何 字符串字面量 |
此关键字也可用作便利宏 static_assert,它在头文件 <assert.h> 中可用。 |
(直到 C23) |
实现也可以将 |
(自 C23 起) |
[编辑] 解释
常量表达式在编译时求值并与零比较。如果它与零相等,则会发生编译时错误,编译器 必须显示 消息 作为错误消息的一部分(但字符集中不在 基本字符集 中的字符不需要显示)(直到 C23)应该显示 消息(如果提供)作为错误消息的一部分(自 C23 起).
否则,如果 表达式 不等于零,则不会发生任何事情;不会发出任何代码。
[编辑] 关键字
[编辑] 示例
运行此代码
#include <assert.h> // no longer needed since C23 int main(void) { // Test if math works, C23: static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!"); // Pre-C23 alternative: _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?"); // This will produce an error at compile time. // static_assert(sizeof(int) < sizeof(char), "Unmet condition!"); constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3; static_assert(_42 == 42); // the message string can be omitted. // const int _13 = 13; // Compile time error - not an integer constant expression: // static_assert(_13 == 13); }
[编辑] 参考
- C23 标准 (ISO/IEC 9899:2024)
- 6.7.11 静态断言 (p: TBD)
- C17 标准 (ISO/IEC 9899:2018)
- 6.7.10 静态断言 (p: 105)
- 7.2 诊断 <assert.h> (p: 135)
- C11 标准 (ISO/IEC 9899:2011)
- 6.7.10 静态断言 (p: 145)
- 7.2 诊断 <assert.h> (p: 186-187)
[编辑] 另请参阅
如果用户指定的条件不为 true,则中止程序。可能在发布版本中被禁用 (函数宏) | |
C++ 文档 用于
static_assert 声明 |