c++primer:变量和基本类型详解

 更新时间:2021年08月31日 16:50:46   作者:nepu_G  
今天小编就为大家分享一篇关于C++Primer中变量和基本类型的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

前言

我只写我觉得重要的,同时把一些我觉得比较重要的习题做一下

类型转换

类型所能代表的范围决定了转换的过程

比如:当我们把一个非布尔类型的算数值赋给布尔类型时,初始值为0则代表结果为false,否则结果为true

当把浮点数赋给整数时,会舍去小数部分。

当赋给无符号整数的值大于它表示的范围时,结果是这个值对(无符号整数最大值+1)取模。

变量声明与定义的关系

变量声明规定了变量的类型和名字,在这一点上定义与之相同,但是除此之外,定义还申请存储空间,也可能为变量赋一个初始值。如果要声明一个变量而非定义它,则使用extern关键词,但是如果给extern修饰的变量初始化了,就抵消了extern的作用

变量命名规范

  • 标识符体现具体含义
  • 变量名一般用小写字母
  • 用户自定义的类名一般用大写字母开头,如Sales_item
  • 如果标识符由多个单词组成,则单词之间应该有明显区别,如student_loan或者studentLoan

复合类型

符合类型是基于基于其他类型定义的类型。

引用

引用为对象起了另一个名字,引用类型引用另一种类型通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名
引用不是对象,而是一个已经存在的对象的另一个别名

由于引用不是对象,所以不存在引用的引用

指针

指针本身就是个对象,允许对指针赋值和拷贝,指针无需在定义时赋初值,和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将有一个不确定的值。

指针的值(即地址)应该属于下列4种状态之一

  • 指向一个对象
  • 指向紧邻对象所占空间的下一个位置
  • 空指针
  • 无效指针(上述指针的其他情况)

*关于指向紧邻对象所占空间所占对象的下一个位置,说实话没太看懂,首先我在知乎查找了一下,然后又查看了一下英文版的c++ primer,发现其意思就是对象末尾的与其相邻的下一个位置,比如:
int t=5;int p=&t,则p+1就代表这个紧邻对象所占空间的下一个位置,但是这个对象没有定义,所以原则上是不能解引用的 

const限定符

默认情况下,const 对象仅在文件内有效

const的引用

可以把引用绑定到const对象上去,就像绑定到其他对象上去一样,称之为对常量的引用,对常量的引用不能用来用作修改其绑定的对象,比如:

有const int a=3,const int &b=a则&b=34,int &c=b这种行为是不允许的,因为&b=34会改变对象的值,而此时是常量,而int &c=b若可以的话则能通过&c=34来改变对象的值,这显然是不能允许的。

引用所引用的类型与其所引用对象的类型一致

指针和const

由于指针本身就是个对象,因此指针本身是不是常量以及指针指向的对象是不是常量就是两个独立的问题。用顶层const(top-level const)代表指针本身是个常量,而用名词底层const(low-level const)代表指针指向的对象是个常量

constexpr和常量表达式

常量表达式(const expression)代表值不会改变并且在编译过程中就能得到计算结果的表达式。

例子:

const int max_files=20 //是常量表达式

const limit =max_files+1//limit是常量表达式

int ret=20//不是常量表达式,因为其值会改变

const int sa=get_size()//不是常量表达式,因为其值需要到运行期间得到

常量表达式是由它的数据类型和初始值来决定的

c++11新规定允许将变量声明为constexpr类型以便由编译器来验证变量是否为常量表达式,声明为constexpr的变量一定是一个常量,而且必须由常量表达式初始化 例:constexpr int sa=20

在constexpr限定符种如果定义了一个指针,限定符constexpr仅对指针有效,对指针指向的对象无关

auto类型说明符

其作用是让编译器去分析表达式的类型,例:auto a=a1+a2,编译器会自动将a的类型转换成a1+a2结果的类型。

decltype

其作用是得出表达式的类型 例:decltype(f()) sum=y,sum的类型就是f()返回值的类型

如果表达式的类型是解引用操作,则decltype将得到引用类型,因为解引用操作能给得到指针所指向的对象,并且能改变对象的值,所以是引用

如果decltype使用一个不加括号的变量则得到的结果是该变量的类型,如果使用一个加括号的变量,则得到的结果是引用类型,因为加了括号就代表这个变量是一个表达式,而变量是作为左值的特殊表达式,所以是引用

头文件保护符

#ifdef 当且仅当变量已定义时为真,#ifndef当且仅当变量未定义时为真,一旦检查得到为真则一直运行直到遇到#endif为止

习题

练习读程序写结果

unsigned int u=10,u2=42;

std::cout<<u2-u<<std::endl;//32

std::cout<<u-u2<<std::endl;//4294967264,

其结果逻辑上是-32但是超出了其范围0-4294967295需要对4294967296取模得到4294967264

练习

下列那些初始化是正确的

  • int i=-1,&r=0;//错误,0为字面值常量,需要常量引用
  • int *const p2=&i2;//正确
  • const int i=-1,&r=0;//正确
  • const int *const p3=&i2;//正确
  • const int *p1=&i2;//正确
  • const int &const r2;//错误,因为引用不是对象,不能用const修饰
  • const int i2=i,&r=i;//正确

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • c++实现解析zip文件的示例代码

    c++实现解析zip文件的示例代码

    这篇文章主要为大家详细介绍了如何利用c++实现解析zip文件,并对流式文件pptx内容的修改,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2023-12-12
  • 解析C#中不一样的大小写转换

    解析C#中不一样的大小写转换

    本篇文章是对C#中大小写转换的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 详解C++11中的线程库

    详解C++11中的线程库

    线程是操作系统中的一个概念,线程对象可以关联一个线程,用来控制线程以及获取线程的状态,这篇文章主要介绍了C++11中的线程库的相关知识,需要的朋友可以参考下
    2022-01-01
  • C语言实现自动发牌程序

    C语言实现自动发牌程序

    这篇文章主要为大家详细介绍了C语言实现自动发牌程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C++超细致讲解队列queue的使用

    C++超细致讲解队列queue的使用

    队列先进先出,即只能在容器的末尾添加新元素,只能从头部移除元素,下面这篇文章主要给大家介绍了关于C++中队列queue用法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • C++中静态存储区与栈以及堆的区别详解

    C++中静态存储区与栈以及堆的区别详解

    本篇文章是对C++中静态存储区与栈以及堆的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++/Qt遍历多维数组的3种方式示例

    C++/Qt遍历多维数组的3种方式示例

    一维数组对于存储和处理一组数据很有用,但有时候,有必要使用多维数组,下面这篇文章主要给大家介绍了关于C++/Qt遍历多维数组的3种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • C++实现扫雷游戏(控制台不闪屏版)

    C++实现扫雷游戏(控制台不闪屏版)

    这篇文章主要为大家详细介绍了C++实现扫雷游戏,控制台不闪屏版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • visual studio 2013中配置opencv图文教程 Opencv2.4.9安装配置教程

    visual studio 2013中配置opencv图文教程 Opencv2.4.9安装配置教程

    这篇文章主要为大家详细介绍了Opencv2.4.9安装教程,以及在visualstudio 2013中opencv的配置步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • VS2010 boost标准库开发环境安装教程

    VS2010 boost标准库开发环境安装教程

    这篇文章主要为大家详细介绍了VS2010 boost标准库开发环境的安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04

最新评论