【发布时间】:2026-02-12 05:25:02
【问题描述】:
使用命名空间时,我需要用分号结束它吗?例如,当我将一个类的前向声明放入命名空间时,很多人不包含分号,但它似乎是可选的。
分号是添加功能还是通过添加或删除来更改当前功能?
谢谢。
【问题讨论】:
-
您能否编辑以包含您的意思的示例?
标签: c++ namespaces
使用命名空间时,我需要用分号结束它吗?例如,当我将一个类的前向声明放入命名空间时,很多人不包含分号,但它似乎是可选的。
分号是添加功能还是通过添加或删除来更改当前功能?
谢谢。
【问题讨论】:
标签: c++ namespaces
如果分号是可选的,它不会改变功能,否则你会得到一个语法错误。
namespace A {
class B; // forward declaration, semicolon is mandatory.
class B {
}; // class definition, semicolon is mandatory
class C {
} f(); // because otherwise it is a return type of a function.
} // no need for semicolon
namespace D = A; // semicolon is mandatory.
如果这些不是你所说的情况,请发表评论。
【讨论】:
;(所有其他标记为 opt)。
; 并且明确没有效果。就个人而言,我没有看到使用 empty-declaration 的意义。
int a;; 合法。考虑一个宏#define DECLARE_MEMBER(x) int x;,无意中用作DECLARE_MEMBER(a);
没有。命名空间不需要以分号结尾,尽管Bjarne wanted to do it 我想减少与其他 C++ 结构的语法相关差异。但是我不确定为什么它没有被接受。
“愚蠢的打字错误将不可避免地 源于句法相似性 命名空间构造到其他 C++ 结构体。我建议我们允许一个 全局后的可选分号 声明以减轻挫败感。 这将是一种“空 声明''以匹配空 声明。”
类的所有前向声明都需要以分号结尾。你能举例说明它在 C++ 中哪里是可选的吗?
【讨论】:
不,您不需要用分号“结束”。这不是常见的做法,也没有任何效果。
namespace foo
{
...
} // no semi-colon necessary here.
【讨论】: