首页 > 编程语言 >C++ primer plus学习之第二章

C++ primer plus学习之第二章

时间:2023-06-20 11:07:27浏览次数:67  
标签:ci const int double C++ plus 引用 decltype primer


1.引用:

int ival=1024;
int &refval=ival;//正确,refval时ival的别名
int &re;//错误,引用必须被初始化
int &ii=42;//错误:不能为非常量引用绑定字面值
const int &ii=42;//正确:可以为常量引用绑定字面值

2.初始化空指针

int* p=0;
int* p=NULL;
int* p=nullptr;//最好用这个

任何非零指针的条件值都是true.
void* 能存放任何类型对象的地址,但不能直接操作对象的值。
3.符合类型的声明

int* p1,p2;

p1是int类型的指针,p2是int型的值,int是基本数据类型而非int;

4.const 限定符
(1)基础定义

const int bufsize =520;//不可被改变

const类型不可被改变,因此必须初始化。

(2).变量声明和定义的关系

extern int i;//声明而非定义i
int j;//声明并定义j
extern double pi=3.1415926;//定义
//在函数体中,如果试图初始化一个由extern 关键字标记的变量,将引发错误

变量只能被定义一次但可以多次声明。
可以在头文件中定义,在函数中调用头文件,并声明,即可使用头文件中所定义的值。

(3).初始化和对const的引用

int i=42;
const int &r1=i;//正确,允许将const int&绑定到一个普通int对象上
const int &r2=42;//正确
const int &r3=r1*2;//正确
int &r4=r1*2;//错误,r4是一个普通的非常量引用

const int可以引用int,但是int却不可以引用const int;
不可以通过常量引用赋值,例:

int i=42;
int &r1=i;
const int &r2=i;
r1=0;
r2=0;//错误,r2是一个常量引用

(4).指针和const
const在double*之前:

const double pi=3.14;
double *pr=π//错误,pr是一个普通指针
const double *cpr=π//正确
*cpr=42;//错误,不能给*cpr赋值
double dval=3.14;
cpr=&dval;//正确,所指向的对象可以变,但是不可以操作对象的值

const在double*之后:

int err=0;
int* const cur=&err;//cur将一直指向err
*cur=0;//正确,重置了所指对象的值
const double pi=3.1415926;
const double* const pip=π//pip是一个指向常量对象的常量指针

(5).顶层const
顶层const:指针本身是一个常量;
底层const:指针所指的对象是一个常量;

int i=0;
int *const p1=&i;//不能改变p1的值,为顶层const
const int ci=42;//不能改变ci的值,为顶层const
const int *p2=&ci;//允许改变p2的值,为底层const

4.类型别名

typedef dounle wages;//wages是double的同义词
typedef wages base,*p;//base是double的同义词,p是double*的同义词
using dd=double;//dd是double的同义词

5.auto类型说明符

int i=1;
double s=0.01;
auto ss=s+i;//auto会自动用s和i相加的结果来判断ss的类型
auto i=0,*p=&i;//正确:i是整数、p是整型指针
auto sz=0,pi=3.14;//错误:sz和pi的类型不一致

6.decltype类型指示符
从表达式的类型判断出要定义变量的类型

const int ci=0, &cj=ci, *p=&ci;
decltype(ci) x=0;//x的类型是const int
decltype(cj) y=x;//y的类型是const int&
decltype(cj) z;//错误,引用要初始化
decltype(*p) c;//错误,任何解引用操作decltype将得到引用类型
decltype((ci)) d;//错误,decltype(())表示引用


标签:ci,const,int,double,C++,plus,引用,decltype,primer
From: https://blog.51cto.com/u_16165815/6521240

相关文章

  • 总结C++中#include<>和#include""的区别
    查找目录不同1、#include<>编译器直接从系统类库目录里查找头文件比如在vs中,使用#include<>编译器会直接在vs安装目录下在编译器自带的库文件中进行搜索。如果类库目录下查找失败,编译器会终止查找,直接报错:Nosuchfileordirectory.如果我们自定义一个头文件"aaa.h",将其放在......
  • CCF_201912-1 报数(C++_模拟)
    思路代码可能写的有点啰嗦冗余,写的时候有点急写完一节就直接复制粘贴了蛤蛤蛤,所以导致中间有些代码比较重复。Code#include<bits/stdc++.h>//模拟usingnamespacestd;intn,sum=0,a,b,c,d;booljudge(ints){ inttemp=s; if(temp%7==0) return0; while......
  • 数据结构代码整理_基于邻接表的拓扑排序(C++_DFS_BFS_递归)
    目录Chat图解基于栈实现(dfs)基于队列实现(bfs)基于递归实现(dfs)Chat1.代码所属的类在数据结构代码整理_基于邻接表存储结构的有向图的实现(C++)2.拓扑排序的思想就是不断找入度为0的节点并将其输出并标记,标记后与他相连的节点的入度都会减一,不断进行标记直至所有的节点都被输出为止......
  • Educational Codeforces Round 82 (Rated for Div. 2)_A. Erasing Zeroes(C++_模拟)
    Youaregivenastring.Eachcharacteriseither0or1.Youwantall1’sinthestringtoformacontiguoussubsegment.Forexample,ifthestringis0,1,00111or01111100,thenall1’sformacontiguoussubsegment,andifthestringis0101,100001o......
  • PAT (Advanced Level) Practice_1095 Cars on Campus (30分)(C++_模拟)
    ZhejiangUniversityhas8campusesandalotofgates.Fromeachgatewecancollectthein/outtimesandtheplatenumbersofthecarscrossingthegate.Nowwithalltheinformationavailable,youaresupposedtotell,atanyspecifictimepoint,thenu......
  • P1969 积木大赛(C++_贪心_模拟)
    题目描述春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是。在搭建开始之前,没有任何积木(可以看成n块高度为0的积木)。接下来每次操作,小朋友们可以选择一段连续区间,然后将第第L块到第R......
  • PAT_Advanced Level_1083 List Grades (25分)(C++_快排)
    GivenalistofNstudentrecordswithname,IDandgrade.Youaresupposedtosorttherecordswithrespecttothegradeinnon-increasingorder,andoutputthosestudentrecordsofwhichthegradesareinagiveninterval.InputSpecification:Eachinput......
  • 【蓝桥杯_真题演练】第十届C/C++省赛B组_H-等差数列(C++_gcd_数论)
    ProblemProcess在输入的时候先去重,然后进行排序,至于他们的公差p则需要计算每两个相邻数值之间差值的最大公因数,最终的结果应该是Code#include<bits/stdc++.h>usingnamespacestd;#definelllonglongintn,a[100010],cnt;set<int>s;intgcd(inta,intb){ returnb==......
  • P1062 数列(C++_数论)
    题目描述给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:(该序列实际上就是:)请你求出这个序列的第N项的值(用10进制数表示)。例如,对于k=3,N=100,正确答案应该是981。输入格式2个正整数,用一个空格隔开:输出格式1个正整......
  • P1095 守望者的逃离(C++_贪心_模拟/dp)
    题目描述恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步速度为17m/s,以这样的速度......