0
点赞
收藏
分享

微信扫一扫

C++primer学习笔记

Sky飞羽 2022-01-15 阅读 77

指针

intp=0;的方式也可以表示空指针,但也常常用nullptr
NULL的方式是使用了预编译的功能,NULL为预编译变量。现代C++程序应当尽量多用nullptr少用NULL。
所有的指针一定要初始化
当使用指针作为逻辑状态时,空指针为0,否则为1
void
p类型的指针可以指向任何数据类型,但不能将其作为指针,使用p会报错,因为编译器不知道对应地址的数据类型,无法确定读取几位数据。因此p往往只是作为地址的存放处。
区分指向常数的指针和常指针,前者指向对象的值不能更改,后者指向不能更改
指向常数的一定要是常指针
但是指向常数的指针指针可以指向普通变量(此时不能通过指针来改变值),如同常数一定要用常引用,但是常引用可以对普通变量使用。因此要记住它们所间址访问的对象不一定不能改变。

常指针(Top-level const)

不能改变指向
定义区别:
指向常数的指针:const int *p=…
常指针:int *const p=…
当然还有指向常数的常指针

在赋值语句中,左值不能有右值不能进行的操作,右值可以有左值不能进行的操作.即对于指针赋值而言,Low-level const必须相同而Top-level const可以不必相同。

常数表达式

在编译时就知道其值的变量或表达式被叫做常数表达式,如:
const int sf = 42;
但有时使用const不能确保,如:
const int a=b;
此时b的值不确定,故a难以确定。可以使用constexpr来确保为常数表达式.如:
constexpr int aaa=100;
值得注意的是,只有常数类型可以用constexpr,即算数类型,引用和指针。自己定义的类类无法作为constexpr来初始化。当constexpr用于指针时,限定的是top-level而非low-level(常指针),用constexpr const 可以表示指向常数的常指针。

类型别名

可以用typedef关键字来给类型起别名,如:
typedef double wages;
便可以用wages来作为double使用。
C++11介绍了新的方式来定义类型别名,使用using关键字
如:using SI = Sales_item //Sales_item是一个自己定义的类
此时SI就是Sales_item的一个别名
值得注意的是,当使用别名来定义指针时,如:
typedef double *wage;
const wage p; //此时p是一个常指针而非指向常数的指针,因为const限制的是后面的wage,此时wage表示一个指针,故…
同理,对于:
const wage *p; //此时wage是一个指向常指针的普通指针。

auto

当想用表达式给变量赋值时可以用auto,如:
auto item = a+b;
编译器会自己推断item的类型。
也可以利用auto的这个特性定义变量,如:auto a =0;此时编译器会自动将a作为int类型。
连续定义时必须是同一种类型,如:auto a =1,b=1.2;是不被允许的。
auto会忽略所有的top-level const,只和右值的low-level同步,若想有top-level const,则需在auto前加上const。

举报

相关推荐

0 条评论