<b>Google C++编程气势指南(二):作用域</b>[VC/C++编程]
本文“<b>Google C++编程气势指南(二):作用域</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
作用域
1. 命名空间(Namespaces)
在.cc文件中,倡导利用不具名的命名空间(unnamed namespaces,译者注:不具名的命名空间就像不具名的类一样,仿佛被介绍的很少:-().利用具名命名空间时,其名称可基于项目或途径名称,不要利用using指导符.
定义:命名空间将全局作用域细分为差别的、具名的作用域,可有效避免全局作用域的命名冲突.
长处:命名空间供应了(可嵌套)命名轴线(name axis,译者注:将命名分割在差别命名空间内),当然,类也供应了(可嵌套)的命名轴线(译者注:将命名分割在差别类的作用域内).
举例来说,两个差别项目的全局作用域都有一个类Foo,这样在编译或运行时造成冲突.假如每个项目将代码置于差别命名空间中,project1::Foo和project2::Foo作为差别标记自然不会冲突.
缺陷:命名空间具有迷惑性,因为它们和类一样供应了额外的(可嵌套的)命名轴线.在头文件中利用不具名的空间简单违反C++的唯一定义原则(One Definition Rule (ODR)).
结论:按照下文将要提到的战略公道利用命名空间.
1) 不具名命名空间(Unnamed Namespaces)
在.cc文件中,答应乃至倡导利用不具名命名空间,以避免运行时的命名冲突:
namespace { // .cc 文件中
// 命名空间的内容无需缩进
enum { UNUSED, EOF, ERROR }; // 常常利用的标记
bool AtEof() { return pos_ == EOF; } // 利用本命名空间内的标记EOF
} // namespace
但是,与特定类关联的文件作用域声明在该类中被声明为范例、静态数据成员或静态成员函数,而不是不具名命名空间的成员.像上文展示的那样,不具名命名空间完毕时用注释// namespace标识.
不能在.h文件中利用不具名命名空间.
以上是“<b>Google C++编程气势指南(二):作用域</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |