您的位置:首页 > 编程语言 > C语言/C++

C++变量和基本类型

2015-07-06 13:35 411 查看
这几天翻了一下c++prime的前两章,对于c++的变量与数据类型有了一些粗浅的了解,谨以拙笔加下,以供后来查阅。

c++中有关变量声明定义与数据类型的选择有许多其他语言不具备的特性。c++是一种强类型语言,要求正在使用中的变量具有明确的数据类型,这样便可约束可在此数据类型进行的操作,但是为了打破固定数据类型的禁锢,c++中也引入了类型转换。当表达式中出现不同大小的数据时,为了保持数据的原貌,通常宽度小的数据会转换为宽度大的数据,然后再进行运算。例如当整型数据和浮点型数据做运算时,整型数据会先转换为浮点型数据,运算的结果也是浮点型数据。在进行不同类型数据的复制操作时,赋值符号右边的数据通常要转换成赋值符号左边的数据的类型,例如当浮点数赋给整型时,会截断小数部分。当表达式中出现无符号数和有符号数时,通常会把有符号数转换为无符号数,如果有符号数为负数,则会会变成一个很大的正数,导致运算结果出乎意料。所以尽量避免有符号数和无符号数的混合运算。

c++中除了整型、浮点型等基本数据类型外,内置类型中还存在一种称为复合类型的数据类型,指针和引用便是复合数据类型。

引用是对于一个已经存在的对象的别称,引用只是一个别名,本身不是对象,它只能绑定到到一个既定对象,且只能绑定一次。当引用绑定到一个既定对象时,所有对于引用的操作都是对于所绑定对象的操作(所以引用只能绑定一个对象且只能绑定一次)。在绑定引用到一个既定对象时,要求引用变量的类型与被绑定对象的类型严格匹配,一个例外是当绑定一个const引用变量到非const变量时也是合法的,只是不能通过引用变量改变被绑定对象的值,这也是const变量与非const变量的本质区别,只有在改变变量的值的时候const的特性才会体现出来。也可以将一个字面值绑定到常量引用中,但是不能将字面值绑定到非常量引用中。

指针也是对于一个对象的间接引用,指针本身也是一个对象,用来存放对象在存储器中的地址。指针可以指向一个对象,也可以不指向任何对象,即指针所存的地址值为空。指针还可以在指向一个对象之后指向另外一个对象,其本质是改变指针变量的值,即存储器中的地址。在将一个对象的地址复制给指针时,要求对象的类型和指针可指变量的类型严格匹配,和应用一样的例外是将一个非const的对象的地址赋值给指向const变量的指针,这种情况也是合法的,但是不能通过指针的间接引用改变对象的值(其机制也和const限定的特性有关)

c++中在使用基本数据类型定义变量时除了基本的数据类型关键字,还可以加上其它特定的类型修饰符。主要的类型修饰符有const、constexpr。const指示所定义的变量为常量,必须初始化,且一经初始化在程序运行过程中不能改变,除了在改变常量的值时会出现错处,常量和变量的其它的用途一样。constexpr指示所定义的变量为常量,且只能用常量表达式初始化,常量表达式中只能包含常量和字面值。

c++中除了可以显示指定变量的类型外,还可以通过计算初始化表达式的结果类型来确定变量的数据类型。有此类功能的保留字有auto和decltype。

auto a=0;//a为整型变量

float a=1.0; auto b=a;//b为浮点型变量

auto  *p=a;//p为指向浮点型变量的指针

decltype(expression) varname;//根据expression表达式的结果的数据类型确定varname的数据类型

decltype((varname1)) varname2=initexpression;//varname2为一个引用类型,引用的变量的类型为varname1的数据类型

int a ; decltype(a+2) b;//b为整型变量

int a; decltype((a))  b=a;//b是一个整型引用变量,引用的对象是整型变量a

有关c++中的数据类型还有许多值得讨论的细节之处,由于笔者水平有限,未能一一列举,诸多偏颇之处留待日后在实践中慢慢纠正,此记只为记录自身学习心得。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 编程 编程语言 c