命名空间中的分号。必要?

时间:2010-10-03 13:17:22

标签: c++ namespaces

使用命名空间时,我需要用分号完成它?例如,当我将类的前向声明放入命名空间时,许多人不包含分号,但它似乎是可选的。

分号是否通过添加或删除来添加功能或更改当前功能?

感谢。

3 个答案:

答案 0 :(得分:14)

如果分号是可选的,它不会改变功能,否则你省略它会得到语法错误。

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.

如果不是您所谈到的案例,请发表评论。

答案 1 :(得分:5)

没有。命名空间不需要以分号结尾Bjarne wanted to do it我想减少与其他C ++结构的语法相关的差异。但是我不确定为什么不被接受。

  

“傻傻的打字错误将不可避免   起源于句法的相似性   命名空间构造到其他C ++   结构体。我建议我们允许   全局之后的可选分号   宣言减轻挫折感。   这将是一种“空洞”   声明''匹配空   陈述“。

该类的所有前向声明都需要以分号结尾。你能举例说明它在C ++中的可选位置吗?

答案 2 :(得分:1)

不,你不需要用分号“完成它”。这不是常见的做法,也没有任何影响。

namespace foo
{
    ...
} // no semi-colon necessary here.