IDE(集成开发环境),把编译器与其他程序创建和分析工具包装在一起
<<输出运算符,右侧运算对象是要打印的值,这个运算符把给定的值写到ostream对象中。输入运算符的计算结果就是其左侧运算对象,即,运算结果就是我我们写入给定值的那个ostream对象。
endl【操纵符】,写入endl的效果是结束当前行,并把与设备关联的缓冲区中的内容刷到设备中
读取数量不定的数据 while(cin>>e)
类定义了行为
点运算符只能用于类类型的对象
C++类型决定了能对对象进行的操作,C++是一种静态数据类型语言,它的类型检查发生在编译时。因此,编译器必须知道程序中每一个变量对应的数据类型
char的空间要确保可以存放任意字符对应的数字值,因此一个char和一个机器字节一样大
int 16位 long 32位 long long64位
计算机以比特序列存储数据,可寻址的最小内存块称为字节,存储的基本单元称为字,通常由几个字节构成。
左侧是字节的地址,右侧是字节中8bit的具体内容
类型决定了数据所占的比特数,以及如何解释这些bit的内容
字面值常量
列表初始化——采用花括号。当这种方式用于内置类型的变量时,如果我们用列表初始化且初始值存在丢失信息的风险,编译器将报错
默认初始化:如果定义变量时没有指定初值,就会被默认初始化。
如果是内置类型的变量,那么它的值由定义的位置决定。
定义于任何函数体之外的变量都被初始化 为0
定义在函数体内部的内置类型变量将不会被初始化,这样的值是 未定义的(试了一下,有这样的变量编译器会报错)
声明一个变量(不是定义),那么它不会申请存储空间,更不会给变量初始值
extern int i;
[标识符]就是dp,a,StudentAge之类的
复合类型~例如指针和引用(这里指的是左值引用)
引用不是对象,指针是对象
空指针不指向任何对象。得到空指针最直接的办法就是使用字面值nullptr来初始化指针。nullptr是一种特殊类型的字面值,它可以被转换成任意其他的指针类型。(应尽量使用nullptr)
void*指针是一种特殊的指针类型,可以存放任意对象的地址。不能直接操作void*指针所指的对象,因为我们并不知道这个对象到底是什么类型,也就无法确定能在这个对象上做哪些操作。
指向指针的引用:引用不是对象,因此不能定义指向引用的指针。但指针是对象,所以存在对指针的引用
const限定符
const对象一旦创建后其值就不能再改变,所以const对象必须初始化
默认状态下,const对象仅在文件中有效,但是,有时我们想要让const变量在文件间共享。这时候,我们不希望编译器为每个文件分别生成独立的变量,我们想要,只在一个文件中定义const,而在其他多个文件中声明并使用它。
解决办法:对于const变量,不管是声明还是定义,都添加extern关键字,这样,就只需定义一次。
const的引用
可以把引用绑定到const对象上,这称为对常量的引用。对常量的引用不能被用作修改它所绑定的对象。
同时也允许将const int&绑定到一个普通int对象上
指针和const
1.指向常量的指针
2.const指针
常量指针必须初始化,且一旦初始化完成,它的值就不能再改变了
(不变的是指针本身的值而非指向的那个值)
3.顶层const和底层const
顶层:指针本身是常量
底层:指针所指的对象是常量
constexpr和常量表达式
常量表达式是指值不会改变并且在编译过程中就能得到计算结果的表达式。
字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式
constexpr变量:
声明为constexpr的变量一定是一个常量,且必须用常量表达式初始化
指针和引用都能定义成constexpr,但constexpr指针的初始值必须是nullptr或0,或者是存储于某个固定地址中的对象(函数体内定义的变量一般来说并非存放在固定地址中,因此constexpr指针不能指向这样的变量。相反的。定义于所有函数体之外的对象地址固定不变,能用来初始化constexpr指针)



