Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用';外部';? 我最近开始学习C++,现在我正在阅读很多关于它的资料。 不断重复的一件事是,使用extern拥有一些全局变量是一种不好的做法,我应该避免这种做法。 问题是,在某些情况下,我看不到全局变量的替代方案,例如,当我在一个文件中有“产品目录”(包含名称、说明、价格等)并且需要在任何其他文件中显示目录中单个变量的值时_C++_Variables_Constants_Extern - Fatal编程技术网

不使用';外部';? 我最近开始学习C++,现在我正在阅读很多关于它的资料。 不断重复的一件事是,使用extern拥有一些全局变量是一种不好的做法,我应该避免这种做法。 问题是,在某些情况下,我看不到全局变量的替代方案,例如,当我在一个文件中有“产品目录”(包含名称、说明、价格等)并且需要在任何其他文件中显示目录中单个变量的值时

不使用';外部';? 我最近开始学习C++,现在我正在阅读很多关于它的资料。 不断重复的一件事是,使用extern拥有一些全局变量是一种不好的做法,我应该避免这种做法。 问题是,在某些情况下,我看不到全局变量的替代方案,例如,当我在一个文件中有“产品目录”(包含名称、说明、价格等)并且需要在任何其他文件中显示目录中单个变量的值时,c++,variables,constants,extern,C++,Variables,Constants,Extern,我注意到一些人避免使用extern的一种方法是使用const来拥有常量变量 我的问题是,这不就是把extern换成另一个(至少在这种情况下)效果几乎相同的关键字吗?这怎么会突然成为一种不错的做法呢?您可能希望将数据像产品目录一样封装在某种对象中。然后,您将查询该对象以从中获取一些数据。如果您需要另一个源文件中的对象,通常您会编写一个函数或方法来接受catalog对象作为参数,调用方需要将该对象传递给该方法或函数。因此,您可能会在一个源文件中包含以下内容: class ProductCatalog

我注意到一些人避免使用
extern
的一种方法是使用
const
来拥有常量变量


我的问题是,这不就是把
extern
换成另一个(至少在这种情况下)效果几乎相同的关键字吗?这怎么会突然成为一种不错的做法呢?

您可能希望将数据像产品目录一样封装在某种对象中。然后,您将查询该对象以从中获取一些数据。如果您需要另一个源文件中的对象,通常您会编写一个函数或方法来接受catalog对象作为参数,调用方需要将该对象传递给该方法或函数。因此,您可能会在一个源文件中包含以下内容:

class ProductCatalog
{
    public:
        ProductCatalog();
        virtual void ~ProductCatalog();

        int getNumItems();
        Product* getItemAtIndex(const int index);
        // ... whatever else your product catalog needs
 };
然后在其他一些源文件中,创建一个产品目录,然后将其传递给任何需要的函数或方法,如下所示:

void DoSomeWork ()
{
    ProductCatalog catalog;
    AddProductsToCatalog (catalog); // <- Here you pass the catalog to someone else to work with

    int numProds = catalog.getNumItems();
    for (int i = 0; i < numProds; i++)
    {
        Product* nextItem = catalog.getItemAtIndex(i);
        // ... do something with product here ...
    }
}
void DoSomeWork()
{
产品目录;

AddProductsToCatalog(目录);//可能您应该在应用程序中使用Singleton。const和extern是非常不同的东西-const表示某些东西不会改变,而extern表示实际变量可以在其他地方找到-我的意思是不在extern语句所在的文件中。@TimBergel我明白了。因此
extern
可以从另一个更改文件而
const
不能,对吗?是的,这看起来像是我想要的。我会处理它并报告回来,谢谢!