c++由c语言衍生而来,最大的特点就是它是一门面向对象的语言,面向过程(c)即需要我们去按照步骤去一步一步写代码,而c++提供的面向对象机制帮助我们更有效更方便的开发。
1.关键字:根据版本的不同关键字的个数有所不同,c中有我们熟悉的32个关键字,而在c++98这个版本中有63个关键字,很多都是和c中关键字类似,以后遇到会细说
2.命名空间
概念:使用namespace关键字对标识符的名字本地化,以避免命名冲突或名字污染
创新互联公司从2013年创立,先为回民等服务建站,回民等地企业,进行企业商务咨询服务。为回民企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
命中空间的定义方式:namespace N1,命名空间是可以嵌套且可以有相同名称的命名空间出现,编译器在编译时会将其合并为一个命名空间,而在命名空间中定义的变量作用域只限于这个命名空间。
命名空间的三种使用方式:N1::a、using N1::b、using namespace N1;
3.缺省参数:缺省参数就是在定义或声明函数时为函数的参数指定一个默认值,若没有传递实参则用默认值。
分类:全缺省参数(每个参数都有默认值),半缺省参数
- 注意:在半缺省参数定义时必须从右向左赋值,这种情况下传递的实参优先匹配最左边的缺省参数。
- 缺省参数不能在函数定义和声明中同时定义,最好在声明。
4.重载函数:在同一作用域中定义几个功能类似的函数,其参数列表(参数个数,参数类型,参数顺序)必须不同才能构成重载函数。
在这里就要说一下为什么在c++中可以构成函数重载而在c语言中不行了,c中编译器对函数的命名是在函数名前加,c++根据编译器的不同有不同的命名规则,但相同点是都对函数的参数列表在命名时进行了修饰,当然,在c++工程中也可以根据自己的需求加入“extern”关键字让编译器当作c风格来编译,如:
#### extern "C" int Add(int x,int y);
这里编译器就按照C的风格进行编译了。
5.引用(&):引用不是新定义了一个变量而是给以有的变量起了一个别名,与所引用的变量公用一块内存空间。
引用作为函数参数和函数的返回值 - 作为函数返回值时,离开函数作用域后,其栈上空间已经还给系统,因此不能用栈上的空间作为引用类型返回。如果以引用类型返回,返回值的生命周期必须不受函数的限制(即比函数生命周期长)。
- 引用做参数效率比传值传参效率高,因为没有空间的开辟,但引用在底层上的实现与指针相同,即传址和引用的效率差不多,但引用比指针用起来更加安全。
- 传引用时若不想修改实参则用const修饰的引用
- const int &&a=10;不是多级引用,叫做右值引用。
6.内联函数:以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。
那么内联函数和宏函数在功能上时类似的,那为什么还要引入内联函数呢?在c中使用宏函数时需要对所有变量带上括号,不然表达式所求结果可能会会与预期有所不同,这样就增加了代码的风险性,其二宏是在预处理是进行替换,很不方便调试,没有类型检测的过程,而内联函数则在编译时进行替换,所以相对宏函数更加安全。 - 在c++中用const定义的常量替换宏,用内联函数替换宏函数。
- 内联函数是用空间换时间的做法,所以当代码很长或有递归时不建议使用内联函数,inline关键字对于编译器也只是一个建议,当不适合作为内联函数时编译器就会忽略内联。
- inline不建议分开定义和声明,内联函数时具有文件作用域的。
7.auto关键字(c++11)
auto修饰的关键字编译器会自动推倒其类型。 - auto在一行定义多个变量时类型必须相同。
- auto不能作为函数的参数也不可以定义数组
auto的第二个用法:基于范围的for循环
int arr[]={1,2,3,4,5};
for(auto & e : arr)
e*=2;
网站名称:c++入门之基本概念
网站链接:
http://kswsj.cn/article/ighjii.html