c++ primer笔记 ----- 变量与基本类型

  • while(std::cin >> value)
    检测条件是istream对象,其效果是检测流的状态。流未遇到错误,则检测成功。当遇到文件结束符(end-of-file, win下,是ctrl+z,然后按Enter),或遇到一个无效的输入,istream对象的状态变为无效,则检测失败。

  • 算数类型的尺寸在不同机器上有所差别。c++标准规定了尺寸的最小值

  • 字面值常量

20 /* 十进制*/  024 /* 八进制*/  0x14 /* 十六进制*/
'a'  //字符字面值
"hello"  //字符串字面值,是字符构成的数组,需要在结尾处添加一个空字符('\0')
\n \t //转义序列
u U L u8  //通过前缀指定字面值类型
u or U l or L ll or LL  ////通过后缀指定字面值类型
bool test = false;
nullptr   //指针字面值
  • 初始化不是赋值,尽管区别无关紧要。double price = 30.0, num = 10.0;

  • 默认初始化:函数体外的内置类型变量被初始化为0;定义在函数体内部的内置类型变量不被初始化,即是未定义的;类的对象如果没有显示地初始化,则其值由类确定。建议初始化每一个内置类型的变量

  • c++支持分离式编译,允许将程序分割成若干个文件。为此,声明和定义区分开来。变量只能被定义一次,但可以被多次声明

//函数外部
extern int i; //声明i,而非定义i
int j;  //声明并定义j
extern double pi = 3.14;   //定义

//在函数内部,试图初始化一个由extern关键字标记的变量,将引发错误
  • 变量命名规范
变量名一般用小写字母,如index
类名一般以大写字母开头,如`Sales_item`
标识符由多个单词组成,如 `student_loan` `studentLoan`
  • 变量名指向实体。同一个名字在不同的作用域可能指向不同的实体。导入头文件是导入变量声明。

  • 显式地访问全局变量::reused

  • 引用:为对象起了另一个名字。引用并非对象,就是说不是实体,只是标识符

int ival = 1024;
int &refVal = ival;
int &refVal2;     //error:引用必须被初始化。初始化后,无法重新绑定到另一个对象
int &refVal3 = 10;   //error : 只能绑定对象
double pi = 3.14;
int &refVal = pi;  //error:类型不对
  • 指针:是对象,无须在定义时赋初值
double *p1, *p2, dp=0, *p3;
double k, &i = &dp; 

double dval;
double *pd = &dval;
double *pd2 = pd;

int *pi = pd;  //error
pi = &dva;   //error

int ival = 42;
int *p = &ival;
cout << *p;  //解引用符来访问该对象

int i = 42;
int &r = i;
int *p;
p = &i;
*p = i;
int &r2 = *p;

//空指针
int *p1 = nullptr;
int *p2 = = 0;
int *p3 = NULL;
  • 建议初始化所有的指针,并且在可能的情况下,尽量等定义了对象之后再定义指向它的指针

  • if(pi):任何非0指针对应的条件值都是truevoid*指针可以存放任意对象的地址,但是无法访问对象

  • 基本数据类型和类型修饰符

int i = 1024, *p = &i, &r = i;
int* p1, p2; //p1是指针,p2是int  。所以不如 int *p1, *p2;
  • 指向指针的指针:int ival = 1024; int *pi = &ival; int **ppi = &pi;

  • 指向指针的引用:int i = 42; int *p; int *&r = p; r = &i; *r = 0;

  • const限定符:一旦创建之后,值不能再改变,所以必须初始化

const int i = get_size();  //运行时初始化
const int j = 42;  //编译时初始化
const int k;       //error 未初始化
  • 默认状态下,const对象仅在文件内有效。如果想多个文件共享const对象,则在变量声明和定义前都添加关键字extern
//f1.cpp
extern const int bufSize = fcn();

//f1.h
extern const int bufSize;
  • const的引用可以指向非const对象。非const的引用不能指向const对象

  • const指针必须初始化,且之后不能改变指针指向的对象(实体)。但对象(实体)的值可以改变。 顶层const是右边的,指本身是const

  • const int *const p = &i;:左边的const表示指向的对象不能变,右边的const表示指针不能指向另一个对象

  • 类型别名

typedef double wages;
typedef wages base, *p;

typedef char *pstring;  //pstring 字符指针类型
const pstring cstr = 0; //cstr是指向char的常量指针。
//不能 const char *cstr = 0; 这样理解不对,成了cstr是指向const char的指针 
const pstring *ps;   //ps 是一个指针,指向的对象是char的常量指针
  • auto让编译器自动推算变量类型

  • decltypedecltype(f()) sum = xsum的类型是f()的返回类型

  • 结构

struct Sales_data {
    std::string bookNo;
    unsigned units_sold = 0;
    double revenue = 0.0;
};
Sales_data accum, trans, *salesptr;
  • main.cpp调用其他*.cpp里面的函数,只需要声明即可。因为分离式编译

猜你喜欢

转载自blog.csdn.net/qq_28038207/article/details/80949768