理解c++11中的static_assert

文章目录

  • 是什么?
  • c++11之前的日子
  • #error的问题
  • 简单的 static_assert 使用范例
  • static_assert 相较于 #error 的优势
  • 使用范围

是什么?

static_assert简单来说就是在编译时进行断言判断. 如果条件不满足, 编译停止并输出指定错误信息.

语法:

static_assert(constant_expression, string_literal); 

c++11之前的日子

在c++11之前, 我们通常使用 #error 预编译命令来进行简单的编译检查. 如:

#if !defined(GUARD)
	#error "You have to define GUARD"
#endif

#error的问题

#error 只能用在简单的场景. 比如对于用到 sizeof 操作符的时候就无能为力了. 因为 sizeof 是在预编译完成之后才进行解析的

简单的 static_assert 使用范例

int main(int argc, char* argv[])
{
	static_assert(sizeof(long) == 8,  "long type must occupy 8 bytes");

	return 0;
}

static_assert 相较于 #error 的优势

  • 可以在预编译之后进行更复杂的断言
  • 库文件可以在编译时检查出常见的错误
  • 提高代码的可用性和稳定性

使用范围

static_assert 可以在以下范围使用

  • 命名空间里
  • 类声明里
  • 代码块里

你可能感兴趣的:(c/c++)