我只觉得那static_assert被定义为一个static_assert-declaration.
根据我的理解,声明应该引入名称,函数名称/对象名称或类型名称.static_assert不适合这个.这不直观.
那么为什么static_assert定义为声明而不是postfix-expression声明呢?
遵循标准的相关部分:
static_assert-declaration:
static_assert ( constant-expression , string-literal ) ;
Run Code Online (Sandbox Code Playgroud)
首先,静态断言和经典规则之间的最大区别在于assert它assert是一个可执行的断言.它是一个运行时断言,必须执行才能完成它的工作.因此,它必须是陈述或表达.(它恰好是一个表达式.)同时,静态断言的工作方式完全不同:不是可执行的断言,它是一个编译时断言.因此,它自然不限于作为陈述或表达.
其次,它必须能够出现在不允许表达式出现的地方 - 命名空间范围和类成员声明之间.为了支持这种安置,它必须是宣言或全新的东西.语言作者决定不引入新的实体并简单地将其作为声明.
第三,在C++ 11中,声明不一定引入名称.例如,C++ 11支持空声明和属性声明,两者都不引入名称.特别是出于这个原因,在C++ 11中,声明的基本概念的描述已经改变了
声明将名称引入翻译单元或重新声明先前声明引入的名称.(C++ 03)
至
声明可以将一个或多个名称引入翻译单元或重新声明先前声明引入的名称.(C++ 11)
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |