考虑这段代码:
#include<iostream>
using namespace std;
class Wilma
{
public:
static int i;
Wilma()
{
cout<<"\nWilma ctor\n";
cout<<"\ni::"<<i<<"\n";
}
};
class Fred
{
public:
Fred()
{
cout<<"\nFred ctor\n";
}
static Wilma wilma_;
};
int Wilma::i=44;//------------- LINE A
int main()
{
int a=0;
Wilma::i=a;//---------- LINE C
Wilma w;
Fred::wilma_=w;//---------- LINE B
}
这里 A 行明确定义了 Wilma 类的静态 int a。(注释掉会导致链接器错误),没有它,链接器会给出未定义的引用错误。(因为 Wilma::i 实际上正在被使用,如果我不使用它,则没有链接器错误在那儿。)
Fred 类的静态 Wilma wilma_ 也应如此,即它也应显式定义..因为它也在 B 行的代码中使用。但事实并非如此,如果 Fred::wilma_ 没有链接器错误没有明确定义。为什么?在 gcc 4.5.2 上测试
编辑: 我不知何故对此有另一个疑问......
LINE C和LINE B都试图使用一个类的静态对象,int Wilma::i
并且Wilma Fred::wilma_
分别。但是只有一个定义int Wilma::i
是强制性的?
为什么不是Wilma Fred::wilma_;
强制性的?
我理解B 行是无操作的答案。但是C线也可以这样说??