#include<iostream>
using namespace std;
class Demo{
public:
int a;
static int c;
};
static int b;
int main(){
Demo d=Demo();
cin>>b;
cout<<"b="<<b<<endl;
cin>>d.a;
cout<<"the result="<<d.a<<endl;
//cin>>Demo::c; //error
//cout<<"c="<<Demo::c<<endl; //error
//Demo::c=3; //error
//int Demo::c=3; //ok
d.a=3; //ok
//cout<<"c="<<Demo::c<<endl; //error
return 0;
}
首先c++中规定类的静态成员变量必须是在类中声明,在类外定义,从上面注释的处看到,直接调用赋值语句
Demo::c=3
是错误的,编译器提示不知道c的类型。在来看输入cin>>Demo.c这样为啥不行呢,可以知道,内部首先是转换成basic_istream(cin,&c),而此时编译器并不知道静态成员变量c是什么类型,traits特性不能特化成功,因此调用失败。