加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在命名空间中有变量很好吗?

发布时间:2020-12-16 09:25:55 所属栏目:百科 来源:网络整理
导读:我有一组适用于文件的函数.最初我把它变成了一个类,唯一的私有成员是一个静态const std :: string,它是文件的名称.用户通过创建对象并从中调用函数来使用这些函数.但是,我认为我将转而使用命名空间,因为它只是一组函数并且更有意义.唯一的问题是我仍然希望保
我有一组适用于文件的函数.最初我把它变成了一个类,唯一的私有成员是一个静态const std :: string,它是文件的名称.用户通过创建对象并从中调用函数来使用这些函数.但是,我认为我将转而使用命名空间,因为它只是一组函数并且更有意义.唯一的问题是我仍然希望保持该常量字符串.沿着这些方向做某事会好吗?

namespace FileHandler {
    // Functions to do stuff with file
    const std::string FILE_NAME;
}

我有一个单独的命名空间实现文件,但我想知道如果文件名是一个类中的私有成员而失去封装是否值得使用命名空间.

解决方法

你可以做类似的事情,但他们会有不同的语义.

在类中,静态变量是声明,而不是定义,它仍然需要在类之外的定义;命名空间中的变量声明是一个定义,除非您将其标记为extern并且不提供初始值设定项.

在你的情况下它没有太大的区别,因为const变量默认具有内部链接,因此你可以在程序中有多个定义(每个翻译单元一个)而没有问题.

例如.

class Test
{
    static const std::string FILE_NAME;
};

是(在某些方面)相当于:

namespace Test
{
    extern const std::string FILE_NAME;
}

如果您这样做,则会将FILE_NAME声明为空字符串.您无法在同一翻译单元的其他位置重新声明它.

namespace Test
{
    const std::string FILE_NAME;
}

但是,你可以这样做.

namespace Test
{
    const std::string FILE_NAME = "myfile.txt";
}

每个翻译单元都有自己的Test :: FILE_NAME版本,但它们都是一致的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读