C++中类的存储类型不能是register和extern可以理解,但为什么不能是auto类型的呀?在结构体中同样出错,在函数中不出错,什么情况?
#include<iostream>
#include<cmath>
using namespace std;
class complex
{
private:
auto double real;//编译时此处有错误illegal storage class
double imaginary;
public:
void initail(double r,double i)
{
real=r;
imaginary=i;
}
double absolute()
{
return sqrt(real*real+imaginary*imaginary);
}
};
int main()
{
complex c;
c.initail(3,4);
cout<<"complex c's absolute value is "<<c.absolute()<<endl;
func();
return 0;
}
auto/register/extern表示的是变量的存储位置和作用域。auto变量存储在函数的堆栈空间,register存储在寄存器,extern表示这里没有新定义变量,只是扩展了一个已有全局变量的作用域。类和结构体中的变量是成员变量,其存储位置和作用域由定义对象的函数决定,不由这些对象自己决定。
例如,你定义了一个类,complex,然后你在函数main中有如下语句:
auto complex c;
这就表示c这个对象在函数堆栈中存储。那么,c中的real和imaginary自然也在堆栈中了。同时,他们的生存期也仅限于函数内部。因此,你不需要,也不能单独给对象的成员变量规定存储位置和作用域。
PS:auto/register现在已经很不常用了,并不建议再用这两个关键字。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。