C++Primer 5th Chap2 Variables and basic Types
wchar_t,char16_t,char32_t用于拓展字符集
char和signed char并不一样,由编译器决定类型char表现上述两种中的哪一种
一般long的大小和int无二,如果超过int的范围直接使用long long类型
float比较鸡肋,精度和速度都不如double(在某些机器上),所以小数索性都用double
若值超过无符号类型最大值,则获得的实际值=value%MaxValueOfType;若值超过有符号类型最大值,结果无法预知
算数表达式中若存在无符号类型,则其他运算数自动转化为无符号型,造成错误,而且结果也不可能小于0
以0开头表示八进制数,以0x或0X开头表示十六进制数
字符串等价于字符数组(末尾带有编译器赋予的'\0'),多行表示格式:
std::cout<<"a really, really long string literal "
"that spans two lines."<<std::endl;
转义字符:
换行符:\n 横向制表符:\t 响铃符:\a 纵向制表符:\v 退格符:\b 双引号:\" 反斜线:\\ 问号:\? 回车符:\r 进纸符:\f
字面值常量的前缀和后缀:
前缀:u 指定类型 char16_t
U 指定类型 char32_t
L 指定类型 wchar_t
u8 指定类型 char(此前缀仅可用于字符串字面值常量,表示UTF-8)
后缀: u或U 指定类型 unsigned及更大
l或L 指定类型 long及更大
ll或LL 指定类型 long long及更大
f或F 指定类型 float(浮点数字面值)
l或L 指定类型 long double(浮点数字面值)
初始化的形式也可以是:int i={0};(c++11) int i (0); int i {0};(c++11)
其中的花括号初始化法可以确保不存在数据因转化类型造成的丢失(一旦有丢失的风险就会报错)
基本类型的值如果在函数体之外未被初始化,其值为0;
基本类型的值如果在函数体之内未被初始化,其值不可知,任意对此值的访问将引发错误
仅想声明一个变量而不定义它,使用关键字extern: extern int i;(不定义意味着不申请存储空间且不赋予初始值)
此类名字不可用:fuck__drug, _Grug, _drug(函数体外)
允许内层作用域中重新定义外层作用域的名字,反之不可
引用:(通常指左值引用,c++11引入了右值引用的概念)
例如:int ival=1024;
int &refVal=ival;(refVal指向ival,认为refVal是ival的一个别名,而且不能再转而指向其他元素,即绑定在一起:你就是我,我就是你)
若如:int &refVal2;则发生错误,引用声明后必立即初始化,即指向一个对象(字面值不可)
指针:(本身即是对象)
例如:int *ip1,*ip2;(这里类型是int*,即int型指针,ip1和ip2仅是名字)
int *p=&ival;(获取ival的地址赋予p,p存放ival的地址)
int ivalValue=*p(使用解引用符*能访问对象)
*p=100;(此举使得ival的值为100, 指针指向了对象,也就获得了对对象的操作权)
int *p3=nullptr;(c++11)(等效于int *p3=0;等效于int *p3=NULL;p3为空指针,不指向任何对象)
void*指针:(可用于存放任意对象的地址,然而不能利用void*指针直接访问对象)
指向指针的引用:int *&r=p;(修饰符从右往左读)
const限定符:
例如:const int buffSize=512;(由于const的修饰,之后禁止再对buffSize赋值)
const int conExp;(此表达式不合法,必须初始化)
默认const对象仅在文件内有效,若希望const对象也能在其他文件中使用,则加上extern关键字:
extern const int bufSize=fcn();
其他文件调用时:extern const int bufSize;
对常量的引用必须也是常量,自然地,其值不能变更:
const int &bufSize1=buffSize;
然而对一般量的引用也可以是常量,只是不能再通过此常量引用修改其值:
int i=12; const int &integ=i;
类似地,也有指向常量的指针,用来存放常量的地址而无法通过指针进行更改,而且此种指针可以指向一般量,但也不能借此指针更改其值:
const int *ptr=&buffSize;
const int *prt1=&i;
与一般对象一样,指针自身也可以是常量(除去指针本身的性质外,其常量的特性与一般常量无二):
int *const ptr2=&i;
const int *const ptr3=&buffSize;
(注意,这里第一个const(即底层const)使得ptr3能够指向常量buffSize,而第二个const(即顶层const)则决定指针自身即为常量)
constexpr和常量表达式:
const int A=20;(等号的左边和右边都必须是const值才是常量表达式)
声明为constexpr的变量必定是常量而且仅能通过常量表达式进行初始化,而且constexpr指针只能指向地址固定的对象或nullptr
constexpr int mf=20;(c++11)
定义类型别名typedef:
例如:typedef double wages;(wages是double的同义名)
typedef wages bunble,*p;(bunble是double的同义名,p是double*的同义名)
(注意:const p *p1=0;表示p1是常量指针(顶层常量),const double *p2=&i;表示p2是指向常量的指针(底层常量))
也可以: using SI=Sales_items;(c++11)(SI是Sales_items的同义名)
auto类型说明符:(c++11)(让编译器分析所属的类型)
例如:auto item=val1+val2;
auto sz=0,pi=3.14;(不可行,一条语句只能是一种类型)
auto *p1=&i,&prf=i;(注意将*,&连结在声明符上)
(注意:auto会忽略顶层const,如果强调顶层const则需要明示:const auto f=ci;)
decltype类型指示符:(c++11)
例如:decltype( f ( ) ) sum = x;(sum的类型为f()的类型)
decltype(*p) p2=i;(*p解引用后的类型是int&,故必须初始化)
decltype( ( i ) ) p3=j;(多一层括号后的类型是int&)
c++11允许为数据成员提供类内初始值
预处理器可以使头文件多次包含仍能正常工作:
#ifndef SALES_DATA_H
#define SALES_DATA_H
/*........*/
#endif
C++Primer 5th Chap2 Variables and basic Types的更多相关文章
- [C++] Variables and Basic Types
Getting Started compile C++ program source $ g++ -o prog grog1.cc run C++ program $ ./prog The libra ...
- C++ Variables and Basic Types Notes
1. Type conversion: If we assign an out-of-range value to an object of unsigned type, the result is ...
- C++Primer 5th 练习 12.19
这阵子真是太忙了, 连续做了四个课设. 当然这并不能作为好久没写博客的借口, 没写博客的主要原因只有一个: 懒. 最近又开始回顾C++的语法与特性(据说C++就是一门需要反复回顾的语言),以及学习C+ ...
- TypeScript学习指南第一章--基础数据类型(Basic Types)
基础数据类型(Basic Types) 为了搭建应用程序,我们需要使用一些基础数据类型比如:numbers,strings,structures,boolean等等. 在TypeScript中除了Ja ...
- A Tour of Go Basic types
Go's basic types are bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr ...
- 编译器重复定义错误:error C2371: 'SIZE' : redefinition; different basic types
我们常常会定义自己工程用的数据类型,可能会与Windows的基本数据类型冲突. vs会报重复定义错误:error C2371: 'SIZE' : redefinition; different bas ...
- QML学习【一】Basic Types
QML入门教程(1) QML是什么? QML是一种描述性的脚本语言,文件格式以.qml结尾.语法格式非常像CSS(参考后文具体例子),但又支持javacript形式的编程控制.它结合了QtDesi ...
- 【读书笔记】C++ primer 5th 从入门到自闭(一)
这几天看了C++ primer 5th的一二章,有很多收获,但是有的地方因为翻译的问题也搞得理解起来颇为难受啊啊啊啊.尤其是const限定符,在C语言并没有这么多复杂的语法,在C++里面语法细节就多的 ...
- [GraphQL] Use GraphQL's Object Type for Basic Types
We can create the most basic components of our GraphQL Schema using GraphQL's Object Types. These ty ...
随机推荐
- Greenplum 6 新功能 在线扩容工具GPExpand (转载)
Gpexpand是Greenplum数据库的扩容工具,可以为集群增加新节点从而可以存储更多的数据,提供更高的计算能力.Greenplum 5及之前,集群扩容需要停机增加新节点,然后对表数据做重分布.因 ...
- WinDbg常用命令系列---显示数字格式化.formats
.formats (Show Number Formats) .formats命令在当前线程和进程的上下文中计算表达式或符号,并以多种数字格式显示它. .formats expression 参数: ...
- C++中继承 声明基类析构函数为虚函数作用,单继承和多继承关系的内存分布
1,基类析构函数不为虚函数 #include "pch.h" #include <iostream> class CBase { public: CBase() { m ...
- Atcoder Regular Contest 060 F题第一问答案证明
一切的开始 令 \(x\) 为字符串,\(p\) 为正整数.如果对于满足 \(0\le i<|x|−p\) 的任何整数 \(i\) 满足 \(x[i]=x[i+p]\),则 \(p\) 称为 \ ...
- 【BIEE】报表导出数据只显示500行,如何解决?
BIEE报表展示的时候每页只显示500行,进而导致导出的时候也只能导出500行,客户抱怨:每次只能导出500行,导出后还得自己合并! 解决思路: 1.找到路径$BIEE_HOME\instances\ ...
- koa post提交数据,koa-bodyparser中间件来获取post提交数据
原生 Nodejs 获取 post 提交数据 首先创建并初始化一个node应用,根路由使用index.ejs模板 var Koa=require('koa') var router = require ...
- px,em和rem
1 px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的 2 em是相对长度单位.相对于当前对象内文本的字体尺寸.如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字 ...
- 蚂蚁Pincap头条
去年(18年)年底想出来看看机会,最后很幸运地拿到了 PingCAP,今日头条的 offer 以及蚂蚁金服的口头 offer.想着可以总结一下经验,分享一下自己这一段”骑驴找马”过的心路历程.当然,一 ...
- golang模拟编程tcp模拟http(转载)
package main import ( "fmt" "net" "strconv" ) //用来转化int为string type In ...
- CS224n学习笔记(三)
语言模型 对于一个文本中出现的单词 \(w_i\) 的概率,他更多的依靠的是前 \(n\) 个单词,而不是这句话中前面所有的单词. \[ P\left(w_{1}, \ldots, w_{m}\rig ...