gpt4 book ai didi

c++ - 为什么 static_assert 是声明而不是 C++ 语法中的后缀表达式?

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:42 27 4
gpt4 key购买 nike

我刚刚发现 static_assert 被定义为 static_assert-declaration

根据我的理解,声明应该引入一个名字,函数名/对象名或类型名。 static_assert 不适合这个。这不直观。

那么为什么 static_assert 定义为声明而不是 postfix-expression 语句?

遵循标准的相关部分:

static_assert-declaration:
static_assert ( constant-expression , string-literal ) ;

最佳答案

首先,静态断言和经典的常规 assert 之间的最大区别在于 assert 是一个可执行断言。这是一个运行时断言,必须执行才能完成其工作。因此,它必须是语句或表达式。 (它恰好是一个表达式。)同时,静态断言的工作方式完全不同:不是可执行断言,而是编译时断言。因此,它自然不限于是语句或表达式。

其次,它必须能够出现在表达式本身不允许出现的地方 - 在命名空间范围内和类成员声明之间。为了支持这样的放置,它必须是声明或全新的东西。语言作者决定不引入一种新的实体,而只是将其作为声明。

第三,在 C++11 中,声明不一定引入名称。例如,C++11 支持空声明和属性声明,两者都没有引入名称。特别是出于这个原因,在 C++11 中,声明 的基本概念的描述从

A declaration introduces names into a translation unit or redeclares names introduced by previous declarations. (C++03)

A declaration may introduce one or more names into a translation unit or redeclare names introduced by previous declarations. (C++11)

关于c++ - 为什么 static_assert 是声明而不是 C++ 语法中的后缀表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19418142/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com