1 原生bool类型
c++里面的bool类型才是真正原生的true和faul,比如常见的大写的“BOOL”,它就不是原生的。
原生的与非原生的bool,它们的区别:
详细说下原生bool与非原生bool之间的差别:
_Bool 这个是c98之后加上的bool类型,和我们原生bool等同。
C++中,建议一直使用原生bool,它是最安全的类型。
补充一点:宏定义一个int类型的bool,之所以这么做,是因为0是false,1是true,在C++中,这种比对是有风险的,可以说是不正确的。
2 头文件的三种标准
在vs2015上默认建立一个项目,VS2015帮我们生成4个文件:
stdafx.h这个是微软给我们的一个大坑。
有可能会导致一个问题:预编译头会导致平台不兼容。
文件后缀cpp和c,编译器会选择不同的编译方式编译。
在以DomainOperatorDemo这个解决方案命名的工程中,生成的DomainOperatorDemo.cpp,有程序员直接改名为main.cpp。告诉别人main方法在这里。
在stdafx.h中,默认包含了3个头文件。我们可以直接在main函数中使用printf()。
其中还包含了tchar.h,这是微软给我们的一个坑,它是windows特定的头文件,它前面有个t,带有很强的平台特性。不要过于依赖这个头文件。
以c++中,stdio.h和cstdio功能一样。
3 补充预编译头:提问stdafx.cpp具体的作用是什么呢?
可以理解为微软的VC特有的文件,实际上我们可以完全的没有它,直接创建空项目。是给编译器用的,并不是我们所需要的。预编译头,想是给我们一定的便利,但并没有什么卵用。
4 域运算符
它的作用主要就是来解决一件事:
看示例:
变量不是最终的本质,本质是内存里的表述数据。
作用域访问符::
变量的覆盖原则:就近访问。谁最近,我就去找它。
命名空间与作用域:
在C语言中,我们了解到,变量的生命周期和作用域,就是看这个变量放在哪,外部的、全局的、局部的,局部的局部的等,在C中对变量的作用域控制力是很弱的。
所以在C++中,特意加入了一个权限概念:命名空间,加强了作用域的控制。除了全局空间,栈空间,又多了一个自已定义的命名空间。
当域作用符前面为空的时候,表示为全局空间,域作用符前面有名称的,就是命名空间
std是个什么样子的命名空间?看图:
如何自定义一个命名空间:
自定义命名空间除了解决变量重定义的问题,它还有其它的作用吗?答案是有的:工业编程里面,大的项目是很多程序员合作的结果,当另一个伙伴想要访问你一个同名的变量时,命名空间就能很好的分隔区分它们。
5 new&delete 运算符
前面讲到了全局,讲到了栈,现在说说“堆”:
c中我们学到2个操作函数是 malloc() 和 free()。C++中间添加了new 和 delete ;
#include <iostream> int main() { int *pNum = new int(100); std::cout << *pNum; return 0; }
运行:100
在C语言中maloc()一定和free()对应使用,那么C++中也是:new一定对应delete使用。
#include <iostream> int main() { int *pNum = new int(100); std::cout << *pNum; delete pNum; return 0; }
运行:100
再看:如果new一个数组呢,怎么释放?
#include <iostream> int main() { int *pNum = new int(100); std::cout << *pNum; int *pArray = new int[10]; delete pNum; delete[] pArray; return 0; }
运行:100
注意:new 和 delete 是运算符,它们不是函数。重要的说三遍!老师就在课堂里强调了三次。
PoEdu - C++阶段班- Lesson02_C to C++