C++ Primer 第二章

首先提个问题?你直到C++中有多少数据类型吗?开始我一直以为和C语言一样,只是多了一个bool类型而已,今天才知道我错了。C++中的类型有,bool,char,wchar_t,short,int,long,float,double,long double.long double这个类型是第一次知道,不同的类型在不同的机器上可能大小不会一样,所以第一个程序也是看看这些类型的大小的,用sizeof函数来求出来的。

#include<iostream>
using namespace std;
int main()
{
    cout<<" The byte of the bool is "<<sizeof(bool)<<endl;
    cout<<" The byte of the char is "<<sizeof(char)<<endl;
    cout<<" The byte of the wchar_t is "<<sizeof(wchar_t)<<endl;
    cout<<" The byte of the short is "<<sizeof(short)<<endl;
    cout<<" The byte of the int is "<<sizeof(int)<<endl;
    cout<<" The byte of the long is "<<sizeof(long)<<endl;
    cout<<" The byte of the float is "<<sizeof(float)<<endl;
    cout<<" The byte of the double is "<<sizeof(double)<<endl;
    cout<<" The byte of the long double is "<<sizeof(long double)<<endl;
    return 0;
}
求出来的结果和想象中的有所区别 wchar_t 类型是占四个字节的,而 longdouble 类型是占 12 个字节的,可能不同的机器上结果会不一样,至少我的上面是这样的结果。问题是知道有宽字符,也不直到怎么用!慢慢解决 !

声明和定义的区别,声明是需要先有定义的,然后在这里说一下,我这里也使用这个变量哈,打个招呼而已,并没有创建新的变量,而定义就不一样了,定义就创建了新的变量,需要新的内存空间了。下面从个程序看看

#include<iostream>
using namespace std;
int sum = 15;
int main()
{
    extern int sum;
    int value = 10;
    cout<<"value :"<<value<<endl;
    cout<<"sum :"<<sum<<endl;
    sum = 10;
    cout<<"sum :"<<sum<<endl;
    return 0;
}
sum 定义有两个地方,一开始的地方和注释的地方,我以为在下面定义也行,实验证明是错误的,只有在上面定义过后,才能够在下面声明并使用,如果先声明,然后再定义,那么就会出现错误。

常量,就是固定不变的量,可以用来表示一些常用的,不许要改变的数据。对常量修改是错误的,常量只能在一开始进行初始化。如果在程序中间对常量进行初始化的话,那么就会出现错误。最好的证据就是自己实验的到的。

#include<iostream>
using namespace std;
int main()
{
    const int sum = 10;
    cout<<"sum :"<<sum<<endl;
    //sum += 10;
    //cout<<"sum "<<sum<<endl;
    return 0;
}

引用:引用在我的理解中就是像给人起名字一样,你原来有个名字,但是可能朋友给你起了一个绰号,不管是叫哪一个,你都直到是叫你的,引用也一样,引用不创造新的空间,还是用的原来的定义的变量。

 #include<iostream>
using namespace std;
int main()
{
    int ival = 10;
    int &refval = ival;
   // int &refval2;
    //int &refval3 = 10;
    cout<<"ival :"<<ival<<endl;
    cout<<"refval :"<<refval<<endl;
    refval += 100;
    cout<<"ival :"<<ival<<endl;
    cout<<"refval :"<<refval<<endl;
    return 0;
}
在定义引用的时候必须为其绑定引用的对象,也就是说引用必须进行初始化,没有初始化的引用都是错误的。还有就是引用绑定的对象必须是变量,不能是常量。以前一直没有怎么用过,特别是交换两个变量的时候,都是用的指针,指针和引用还是有很大区别的,用指针作为行参的话,传递的是变量的地址,因为可以通过指针交换变量。而对于引用来说,传递的就是变量本身,直接绑定到行参上,还可以直接对传递的行参进行数据的交换就能够影响到传递的变量。而如果只是用普通的参数传递,是做不到这一点的, C++中交换函数 swap就是用引用实现的。

Const引用的用途,const引用就可以作为一个只读来看待,因为const变量一旦初始化就不能够进行变量的改变,所以只有读功能而没有写功能,可以实现只读的功能。对于引用的对象来说,还是有区别的。引用的对象也分为const变量和一般的变量的却别。

#include<iostream>
using namespace std;
int main()
{
    int val = 10;
    const int &refval = val;
    cout<<"val :"<<val<<endl;
    cout<<"refval :"<<refval<<endl;
    //refval += 10;
    val += 10;
    cout<<"val :"<<val<<endl;
    cout<<"refval :"<<refval<<endl;

    const int val2 = -10;
    int &refval2 = val2;
    cout<<"val2 :"<<val2<<endl;
    cout<<"refval2 :"<<refval2<<endl;
    refval2 += 10;
    cout<<"val2 :"<<val2<<endl;
    cout<<"refval2 :"<<refval2<<endl;
   
}
这个程序是运行不了的,需要解释的就是 const引用可以引用 const变量和非 const变量。对于非 const变量而言,如果变量值发生了改变,那么 const引用的变量值也发生了改变。这里虽然是 const类型的,但是只能够保证自己引用的值步发生变化,而不能够保证所引用对象的值不发生变化。如果用一个普通变量去引用一个 cost变量,那么就会发生错误,因为 const变量只能够被 const引用所引用,但是普通变量可以被普通引用和 const引用所引用。慢慢体会!

还有下面一个程序,先猜一下程序的运行结果。

#include<iostream>
using namespace std;
int main()
{   double dval = 12.3;
    const int &drefval = dval;
    cout<<"dval "<<dval<<endl;
    cout<<"drefval "<<drefval<<endl;
    dval += 10;
    cout<<"dval "<<dval<<endl;
    cout<<"drefval "<<drefval<<endl;
    return 0;
}

dval12.3

drefval12

dval22.3

drefval12

发现了没有,是不是和你想的不一样,在这里引用的过程中,由double类型转换成了int类型的,中间需要一个中间值来进行转换,而drefval正是绑定到了这个中间值上,所以才会出现这种情况,在dval发生变化时候,由于drefval并没有绑定到dval上,所以值不会发生变化,这在使用的过程中也需要注意。

枚举就是一组的常量,或许你在某个地方需要很多常量,那么就别用const来一个一个定义了,用枚举常量更加方便。枚举常量的用法是需要有关建字enum来定义的一组常量,其中如果不指定值的话是从0开始的,如果你指定一个值的话,那么后面的值就在前面值的基础上加1作为值

#include<iostream>
using namespace std;
int main()
{
    enum Point {a=-1,b,c=10,d};
    Point first = a;
    Point second = d;
    cout<<a<<endl;
    cout<<b<<endl;
    cout<<c<<endl;
    cout<<d<<endl;
    return 0;
}





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值