implemented库中的static_assert
Loki的方式(它实际上是一个名为STATIC_CHECK
的预处理器宏),可以按如下方式使用:< / p>
STATIC_CHECK(myCondition, My_Error_Message);
请注意My_Error_Message
必须是有效的标识符。
我想知道如何为C++11
标准实现static_assert
以获取错误消息的字符串文字参数。
我决定查看type_traits
包含文件,该文件位于我的Ubuntu 14.04上使用g ++ 4.8.2的/usr/include/c++/4.8
。令我惊讶的是,我发现只有static_assert
的用法,而不是定义(也不是预处理器宏)。我没有在type_traits
包含的文件中找到它。
那么,我在哪里寻找static_assert
的实现?
答案 0 :(得分:3)
static_assert
是C ++ 11中新的语言级功能,而不是头文件中包含的库。符合标准的C ++实现可以自由地实现static_assert
。它可以内置到编译器中(我怀疑大多数编译器会这样做),或者它可能是库的一部分(尽管这很有挑战性,因为static_assert
不需要头文件)。我认为找出适合您的特定编译器的最佳方法是检查文档,并在必要时查看源代码。
答案 1 :(得分:0)
static_assert
必须内置于编译器中,因为必须在编译时检查检查的条件。如果要使用某些库代码进行检查,则可以在运行时完成。
另一方面,assert
是一个宏,已经说明它是在库代码中实现的,并且它的检查是在运行时完成的。