现在“static_assert”是C ++ 0x中的关键字我认为用“assert”关键字替换C“assert”宏也是合乎逻辑的。
答案 0 :(得分:3)
static_assert在编译时被解释,所以它必须是一个关键字,所以编译器可以处理它。
断言不需要是一个关键字,并且将它设置为一个没有多大意义,因为程序可能有许多方式来响应断言成功或失败。因此,在库中实现它更有意义,它通常实现为宏。
答案 1 :(得分:2)
assert
没有编译时间意义。预处理器不了解C ++语言,因此关键字没有任何意义。
相比之下,static_assert
在编译时进行评估。在这方面,使其成为关键词更有意义。编译器关心它的存在。
还有历史原因;它不是C中的关键字,并且在C ++中使用它会使现有的断言宏导致未定义的行为。
答案 2 :(得分:2)
基本上,因为它不需要它。运行时断言的现有断言机制非常好,不需要语言支持。
答案 3 :(得分:2)
其他答案为您的问题提供了一些可能的答案,但最近的提案表明断言可能确实成为C ++ 17中的关键字:https://isocpp.org/files/papers/N4154.pdf
答案 4 :(得分:1)
assert
可以在库中实现,static_assert
不能。因此static_assert
获取关键字是因为它需要语言支持,而assert
则不需要。
答案 5 :(得分:1)
为了与已经用c语言编写的代码兼容而无法完成此操作,该代码具有断言作为变量名称。因此,正如oli所提到的,我们将无法编译,因为断言不再是宏
答案 6 :(得分:1)
在C ++ 0x中(来自here):
在C ++ 0x中,可以声明静态断言以在编译时检测和诊断常见的使用错误。
这是static_assert
语法:
>>-static_assert--(--constant-expression--,--string-literal----->
其中constant-expression
必须在上下文中转换为bool
。如果它转换为false
,则编译器将根据string-literal
发出错误。
所以,这基本上是需要关键字的语言的扩展。它不是运行时机制。
再次来自上面链接的文件:
向C ++语言添加静态断言具有以下好处:
库可以在编译时检测常见的使用错误。
C ++标准库的实现可以检测和诊断常见的使用错误,从而提高可用性。
- 醇>
您可以使用static_assert声明在编译时检查重要的程序不变量。