使用命名空间时,我需要用分号完成它?例如,当我将类的前向声明放入命名空间时,许多人不包含分号,但它似乎是可选的。
分号是否通过添加或删除来添加功能或更改当前功能?
感谢。
答案 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.