static就成局部静态变量了,不给初始值会执行值初始化(内置类型默认为0)传实参不用类型一模一样,能转换就行
可以传递数组(传的是首元素指针,所以形参的大小写不写无所谓)或函数(会转换为函数指针)
数组的引用作为形参,则必须指定大小了,而且传的时候也不能乱传了
有的类型不支持拷贝(比如IO),也就不能传值,所以只能传引用
对于形参为const的情况,实参不const也行,但是函数里就别想改值了
对于形参为const 引用的情况,使用引用只是为了避免拷贝的开销,仍然不可以更改值
如果指针是底层const的也就是它是指向const值的指针,那么则不可以通过指针的方式来改,但是实际上是可以改的
非const的引用或指针形参会导致可接受参数范围的缩小,因为编译器不允许将真的不能改的东西传到可以改的地方
处理不同数量实参,如果类型相同,可以使用initializer_list做形参,类型不同的话则需要写一个可变参数模板
initializer_list里的值都是const,并且拷贝赋值操作并不是真的拷贝而是共用,相当于一个vector,有size,也有begin和end(不是迭代器而是指针),传实参的时候,实参要用大括号括起来
...也可以用来处理不同数量实参,但一般跟C用,C++中的类传到这种形参一般都拷贝的不对
void的函数如果返回一个返回void的函数没问题,要是其他值则不行cstdib中的EXIT_SUCCESS和EXIT_FAILURE是预处理变量,与机器无关typedef或者using简化的话 就用尾置返回,也属于骚操作const参数的const会被忽略,所以有无顶层const的两个函数不能算重载,而算重复定义const可以算重载,因为确实这样更严格const>类型提升>类型转换>类类型转换nullptr或者0时,表示目前不指向任何函数,而不是代表没有类型inline就行了,到底联不联交给编译器决定constexpr因为是内联函数所以也要遵守这个规则constexpr函数return(这样才能保证编译时知道结果),那么这种函数就可以赋给constexpr表达式,因为这都是编译时候干的事,所以constexpr默认设置为内联的constexpr那么函数就算生成常量表达式也不会返回常量表达式,因为普通函数就是要运行才知道结果constexpr函数可不一定返回常量表达式,当传递非常量,编译时就计算不出值了,也就返回非常量表达式了assert预处理宏cassert头文件中,其实也是预处理变量,像一个内联函数,assert(表达式)对表达式求值,一旦为假,就终止程序,真的话就啥也不做,assert干不干活依赖的是NDEBUG这个预处理变量的状态,如果定义了就啥也不做,默认是没定义的assert可不是语法糖,因为只要定义NDEBUG,就真的不干活了,程序就可能会出问题,它只是用来做正式发布后就不做的调试NDEBUG和#ifndef和#endif来创建调试的代码,在命令行输入-D NDEBUG则之间的代码就不运行了__func__静态局部变量来输出当前函数的名字, __FILE__ , __LINE__ , __TIME__ , __DATE__分别表示文件名,行数,编译时间,日期,用来为调试输出信息原文:https://www.cnblogs.com/NoteofZy/p/14820052.html