命名空间内的extern const和静态const类成员之间的区别?

时间:2013-09-13 13:04:23

标签: c++ static const extern

希望在某个中心点定义常数(例如某些字符串或数字)。为了保持代码的可读性,还希望能够容易地访问这些常量。在我研究实现这一目标的良好实践时,我现在发现了以下两个解决方案(https://stackoverflow.com/a/9649425/2776093)。

FoodConstants.h:

namespace FoodConstants {
    namespace Fruits {
        extern const string Apple;
        ...
    }
    ...
}

FoodConstants.cpp:

namespace FoodConstants {
    namespace Fruits {
        const string Apple = "apple" ;
        ...
    }
    ...
}

FoodConstants2.h:

class FoodConstants {
public:
    class Fruits {
    public:
        static const string Apple;
        ...
    }
    ...
}

FoodConstants2.cpp:

const string FoodConstants::Fruits::Apple = "apple"
...

对于这两种解决方案,我可以在包含.h的程序中的任何地方使用FoodConstants :: Fruits :: Apple访问apple常量。初始化在同一编译单元中完成,避免了初始化问题。我注意到了一个区别:对于第二个解决方案,我不能,例如,使用“使用命名空间FoodConstants”来缩写对Fruits :: Apple的字符串常量的访问。

还有其他差异吗?是否有一种组织常量的首选方法?

1 个答案:

答案 0 :(得分:0)

  
    

还有其他差异吗?

  

是的,有。我可以看到两个:

  1. 使用类解决方案,您可以控制命名空间解决方案无法实现的辅助功能(public / protected / private)。

  2. 使用命名空间可以将声明拆分为多个文件,而这对于类解决方案是不可能的,因为必须在单个文件中给出类定义(包含所有成员的声明)。