又是环球球
Globals once again
本文关键字:环球 更新时间:2023-10-16
我知道几乎所有的东西都是关于'全局'的话题。很抱歉回到这里。生产代码中有一些东西,我不完全理解。我将非常感谢在这方面的帮助。所以提前谢谢你。
考虑以下实现:
file1.h
class classA
{
classA();
// something in
};
const classA& GetClassA();
file1.cpp
classA::ClassA()
{
cout << "I have been called";
// do initialization
}
const classA obA;
const classA& GetClassA() { return obA; }
到处调用GetClassA函数。相同的全局对象(我认为)在翻译单元中是可见的(至少这是我的期望)。然而(对我来说很神秘),类c-tor似乎被调用了不止一次。有人能详细说明一下吗?
相同的全局对象(我认为)在翻译单元中是可见的(至少这是我的期望)。
不,它只在声明它的翻译单元中"可见",而且似乎只在其中一个翻译单元中声明。
在这种情况下,全局变量被声明为const
,这意味着它具有内部链接,所以其他翻译单元即使声明它也不能引用它。
对所有tu可见的是函数,它通过引用返回全局,因此其他tu不能直接引用该对象,但可以通过调用该函数获得对它的引用。
你是对的,构造函数不会被调用超过一次。假定其他代码正在创建相同类型的实例,或者复制该函数返回的实例。
假设const A是一个错别字,而不是const classA A,所提供的代码应该只构造A一次。然而,由于这里没有阻止classA的其他用法,它可能在代码的另一个不可见部分构造。
相关文章: