什么时候C++表达式很好?

101*_*010 7 c++ language-lawyer c++11 c++14

略过C++标准,我在很多情况下参与了声明:

表达X应该很好.

我对自己说"好吧,直觉上你知道一个结构良好的表达是什么,但是你能否正式解释是什么让C++表达式成为一个良好的表达式?".

我搜索了一下,但没有找到任何可以对此事做出正式解释的内容.所以这是我的问题:

问: C++中格式良好的表达式的定性特征是什么?

Woj*_*wka 7

C++ Standard没有定义格式良好的表达式,尽管它实际上使用了这个短语.有良好形成的程序的定义

1.3.26 [defns.well.formed] 格式良好的程序 C++程序是根据语法规则,可诊断的语义规则和单一定义规则(3.2)构建的.

我想我们可以假设格式良好的表达式是一种表达式,它不会使程序形成错误(在1.3.9中定义为未形成良好).


Jon*_*ely 6

A-形成良好表达必须符合语法用于表达(如通过标准中定义),并且必须符合语义规则,如不使用还没有被声明的名称,或不与相同的范围内重新声明的名称不同的意思。

i = 0

X::i++
Run Code Online (Sandbox Code Playgroud)

上面的表达式在语法上是有效的,但是如果i没有被声明,或者是const,或者X不是命名空间或类类型,或者X::i没有被声明,或者X::i不支持后增量,那么它们不符合语义要求格式良好的表达。

问:C++ 中格式良好的表达式的定性特征是什么?

请参阅第 1 至 15 条。您不能将整个 C++ 语言简化为一个简单的列表。