c++ - 一个 C++ 类函数应该以 } 结尾吗?或者只有一个}?

标签 c++ syntax

关于 C++ 语法的基本问题。

C++ 函数应该以 ; 结尾吗?还是没关系?

或者这两个例子有什么区别?

有结局;

void Test :: print()
{
  ...
};

没有;

void Test :: print()
{
  ...
}

我见过有和没有的 C++ 代码, 但我不明白其中的区别。

/谢谢


更新:

在这种情况下;应该避免,因为它没有做任何有用的事情,甚至可能在将来成为一个问题。

最佳答案

在类主体之外(其中函数定义可以选择性地后跟单个 ;),函数定义由 复合语句 结束- 这是结束 }。在命名空间范围内,函数定义 的右大括号之后的下一个标记必须构成下一个声明的一部分。

在 C++03 中,没有 empty-declaration 这样的东西,所以放置 ; 是非法的,尽管被许多实现所接受。 (尽管 C++03 simple-declaration 的语法似乎允许缺少 decl-specifier-seq 和缺少的 init-declarator-list,只留下一个 ;,在标准的 7 [dcl.dcl]/3 中有一个语义规则禁止两个可选部分被遗漏。)

In a simple-declaration, the optional init-declarator-list can be omitted only when declaring a class (clause 9) or enumeration (7.2), that is, when the decl-specifier-seq contains either a class-specifier, an elaborated-type-specifier with a class-key (9.1), or an enum-specifier.

C++0x 引入了一个empty-declaration(这是一个没有效果的声明),因此你可以在命名空间范围内拥有任意数量的流氓;尽管没有充分的理由这样做。

关于c++ - 一个 C++ 类函数应该以 } 结尾吗?或者只有一个}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5487849/

相关文章:

javascript - 取消选中特定行中的复选框的语法是什么?

c - C程序初始化中反斜杠有什么用?

c++ - 使用额外括号时为 "error: expected expression"

c++ - 从 istringstream 获取带后缀的 long long (C++)

c++ - C++中二进制模式的长度指示器

C++ SFML 数组错误 : Access violation reading location 0xC0000005

ruby - 什么可能的歧义导致此 Ruby 代码抛出 SyntaxError?

c++ - 将较小的 vector 与较大的 vector 进行比较,以检查它是否在较小的末尾有所不同

c++ - klocwork CWARN.SIGNEDBIT on unsigned char

java - 将java语法折叠成单行