C++Primer学习笔记12.5

91 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

2.5处理类型

2.5.1类型别名

typedef char *pstring;
const pstring cstr = 0; //cstr是指向char的常量指针
const pstring *ps; //ps是一个指针,它的对象是指向char的常量指针
上述两条声明语句的基本数据类型都是const pstring,和过去一样,const是对类型的修饰。pstring实际上是指向char的指针,因此const pstring就是指向char的常量指针
const char *cstr = 0; //这是对const pstring cstr的错误理解
​

2.5.2auto类型说明符

auto定义的变量必须有初始值,auto一般会忽略掉顶层const

2.5.3decltype类型指示符

int i = 42, *p = &i;
decltype(*p) c;//err:c是int& ,必须初始化
注意:表达式的内容是解引用操作,则decltype将得到引用类型。
//解释:解引用指针可以得到指针所指的对象,而且还能给这个对象赋值。因此decltype(*p)得到的是int& 而不是int
//另decltype((val))的结果永远是引用

1、对引用变量的不同之处:auto将引用变量赋给变量后,变量的类型为引用变量所对应的变量的类型。而decltype则是为引用类型。

2、处理底层const的方式不同:auto一般会忽略掉顶层的const,同时底层的const会被保留下来。decltype 则会返回该变量的完整类型(包括顶层const和引用在内)

2.6自定义数据结构

//预处理器
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include <string>
struct Sales_data {
    
};
#enif

预处理变量无视c++语言中关于作用域的规则

3 字符串、向量和数组

3.1 命名空间using的声明

每个using声明引入命名空间中的一个成员。一行可以只放一条using声明也可以放多个using声明。注意,每句话都要以分号结束

using std::cin;
using std::cout; using std::endl;

另外,头文件中不应包括using声明