不使用';外部';? 我最近开始学习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
不能,对吗?是的,这看起来像是我想要的。我会处理它并报告回来,谢谢!