Java程序员的C++回归路 (3)

const修饰的类型有普通类型的大部分操作,如将const int类型转为bool类型。

int i = 0;
const int ci = i;
int j = ci;

上述代码中关于const的操作:给ci赋值的时候不会考虑ci是常量类型,因为不会改变常量的值,同样的,将ci赋值给j的时候也是如此。

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

如果需要在不同文件间共享const变量的值,则使用extern用于声明常量并非本文件独有。

常量引用

常量的引用类型需要使用常量引用,如下所示:


const int ci = 1;
const int &ri = ci;
int &r2 = ri;  // error:non const reference to a const object

const pointer

指针本身是const,例如:


int num = 0;
int *const curNum = #  // curNum will always point to num
const double pi = 3.14;
const double *const pip = π  // pip is a const pointer to a const object

Top-level const

使用top-level const来标识指针本身是一个常量;如果指针指向一个const对象,那么我们说这个const是low-level const。

constexpr

常量表达式:当做const表达式时可以使用constexpr

类型处理

typedef

alias

格式为:using a = A;

auto

自动判断类型

decltype

自动判断类型,但是不计算变量的值

decltype()中的解引用操作返回的结果是引用,而不是原始类型

在decltype中添加一对以上的括号,将返回引用类型

struct //定义struct的两种格式
struct{
 
};
struct {...} a,b,*c;

struct中定义的成员变量会在对象定义的时候被默认初始化。

定义头文件

一般只定义一次的内容放在头文件中,如类、const、constexpr变量等。

头文件一旦改变,相关的源文件需要重新编译来获取新的变量声明。

确保头文件多次包含仍能被正确处理的机制是预处理器(preprocessor)

预处理器看到#include会将内容替换掉#include

头文件保护符:使用以下代码来避免重复包含的发生:

#ifndef CPP_TEST_SALES_DATA_H
#define CPP_TEST_SALES_DATA_H
struct sales_data{

};
#endif //CPP_TEST_SALES_DATA_H

与编译器无视关于作用域的规则

一般的做法是基于类的名字来构建保护符的名字

字:在指定机器上进行整数运算的自然单位

字符串、vector using

格式为:using namespace::name

头文件不应该包含using描述,否则可能有名字冲突。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzpps.html