2 bancao9710 bancao9710 于 2016.03.30 15:20 提问

关于C++类的数据成员的存储类型,为什么不能是auto、register和extern

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;
}

2个回答

cxsmarkchan
cxsmarkchan   2016.03.30 15:33
已采纳

auto/register/extern表示的是变量的存储位置和作用域。auto变量存储在函数的堆栈空间,register存储在寄存器,extern表示这里没有新定义变量,只是扩展了一个已有全局变量的作用域。类和结构体中的变量是成员变量,其存储位置和作用域由定义对象的函数决定,不由这些对象自己决定。
例如,你定义了一个类,complex,然后你在函数main中有如下语句:

auto complex c;

这就表示c这个对象在函数堆栈中存储。那么,c中的real和imaginary自然也在堆栈中了。同时,他们的生存期也仅限于函数内部。因此,你不需要,也不能单独给对象的成员变量规定存储位置和作用域。
PS:auto/register现在已经很不常用了,并不建议再用这两个关键字。

bancao9710
bancao9710   2016.03.30 16:38

thanks for your help.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言-变量的存储类别(auto, static, register, extern)
任何一个变量和函数都有两个属性,1、数据类型(我们已经熟知) 2、数据的存储类别 有2种存储方式,有4种存储类别 auto自动变量 一般来说auto可以省略,1、函数的形参 2、在函数中定义的局部变量(包括在复合语句中定义的局部变量)都是自动变量auto。上述2种自动变量都是存储在内存的动态存储区中的。 static静态局部变量 1、第一次赋值有效,以后在调用时,直接使用上一次调用的
C语言中的auto、 register、extern、static用法
转载地址:http://www.111cn.net/net/c/38998.htm auto、register 两个是用来修饰变量的, extern、static两个都变量函数都可以。 一、 auto 定义的变量默认是auto类型的二、register变量       关键字regiter请求编译器尽可能的将变量存在CPU的寄存器中。有以下几点注意的地方。        1、regis
存储类型修饰符的区别(auto、static、register、extern、volatile、restrict)
转自:http://blog.csdn.net/setflvet/article/details/6924878 一、局部变量和全局变量: (1)局部变量:局部变量也叫自动变量,它声明在函数开始,生存于栈,它的生命随着函数的返回而结束。 [cpp] view plain copy  print? #include       int
C/C++——auto,static,register,extern用法
本文总结了auto,register,static和extern的用法,结合变量生存周期和作用域概念对static和extern做了说明,主要对static和变量、函数和类做了详细总结。帮助读者在C/C++编程中对于变量有更深刻的认识。
C语言中局部变量和全局变量的存储类别(static,extern,auto,register)
1.局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。 1.1局部变量 局部变量也
C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)
1.局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。 1.1局部变量 局部变量也
C 语言四大存储类型。。。
1。 extern, 从其英文意思外部的就能看出,这个表示引用一个外部变量。。          C语言程序编译时是以每个.c 文件为单位的,最后再把它们链接在一起,所以每个文件中的全局变量对于其他文件是可见的,所以可以在一个文件中引用其他文件中的变量和函数。          extern 关键字就是用来表示引用别的单元的变量。。。        比如。。file1.c 中
基本数据类型
存储类型auto,static,extern,register的区别
C/C++中auto、static、register、extern关键字区别小结
本文介绍了四种存储说明符关键字的区别和使用注意小结
C++中auto,static,register,extern四种变量简单理解
静态存储变量:一般是在定义时就分配了固定的存储空间并一直保持不变,直到整个程序结束为止. 动态存储变量:一般是在程序执行过程中使用到该变量时才会为该变量进行存储空间的分配操作,在调用函数完毕之后,此类变量的存储空间将会立即进行释放. auto变量: #include #include using namespace std; //auto类型的变量是C++当中默认的存储类型变量,一般情况