C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 在命名空间中有变量很好吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一组适用于文件函数.最初我把它变成了一个类,唯一的私有成员是一个静态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版本,但它们都是一致的.

大佬总结

以上是大佬教程为你收集整理的c – 在命名空间中有变量很好吗?全部内容,希望文章能够帮你解决c – 在命名空间中有变量很好吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。