6.1函数基础
调用函数:函数的调用将完成两项工作,一是实参初始化函数对应的形参;二是控制权从从主调函数转移到被调函数,主调函数的执行被中断,被调函数开始执行。当函数遇到return语句时,也要完成两项工作,一是返回return语句中的值(如有);二是控制权从被调函数转移到主调函数,被调函数被停止,主调函数继续往下执行。
对象作用域和声明周期:对象的名字有作用域也就是可见性,表示某个对象的名字在某个块内可见(可用);对象本身有生命周期,表示对象从被创建到被销毁的过程。
局部对象按定义方式有自动对象和局部静态对象之分,自动对象指函数控制路径通过对象的定义语句时,对象被自动创建,到达对象所在的块尾时,对象被自动销毁,这样的对象就是自动对象,如形参;而局部静态对象,当函数控制路径通过其定义语句时被创建和初始化,且仅能被初始化一次,一直到程序终止时才会被销毁。
函数的声明:函数的三要素是 函数返回类型,函数名,形参类型。函数名字需在调用前声明。
可在头文件.h中声明函数,在源文件.cpp中定义函数(源文件和需要使用函数的文件都需要导入该头文件)
6.2 函数的参数传递
函数被调用时,将用传入的实参来初始化形参,该过程同变量的初始化过程。
如果形参是非引用类型时,形参是实参的拷贝,形参和实参是两个相互独立的对象,可以说实参被值传递,或者说函数被传值调用。
如果形参是引用类型时,形参将与传入的实参绑定,此时,形参是实参的别名,它们指代的是同一个对象;函数内对形参的操作也将作用于实参,可以说实参被引用传递,或者说函数被传引用调用。
“理解顶层const ”--顶层const作用于对象本身,即对象本身是常量,不可更改。、
形参类型:
①传值形参,当形参是非引用类型的变量时,形参是实参的拷贝,函数内对形参的操作不会影响实参。
且实参的顶层const也将被忽略,即无论实参是否为const 对象,传入时都只是将其副本拷贝给形参,其const属性会被忽略。
②指针形参;当形参是指针类型变量时,其本质和传值形参一样,都是对实参的拷贝,实参与形参互相独立,唯一不同点是指针存储的是地址值,指针形参拷贝的是实参的地址值,由于指针的这一特点,能让实参与指针形参指向同一个对象;函数内对指针解引用的操作即对实参所指对象的操作。但函数内对指针形参本身的操作仅改变指针形参本身的地址值或者说仅改变指针形参的指向,不影响实参指针(传入的指针)。
③引用形参:引用形参将绑定初始化它的实参,函数内对引用的操作实际上是作用在引用所引的对象上。
“使用引用形参,避免拷贝”--对于拷贝效率低或者遇到不允许拷贝的情况下,使用引用形参将大大提到效率。如不需要修改引用形参所引对象,可以将引用设置为常量引用类型。
“使用引用形参可以隐式返回多个参数”---函数只能返回一个对象,如需返回多个信息,可以将部分对象通过引用传递传入函数内,这样函数内对引用形参的修改也将被带出函数。
重要概念:“const形参与实参”!!!
①当形参是传值形参类型时,实参初始化形参时会忽略调顶层const,即实参的副本(右值)拷贝给形参时,实参的const属性会被过滤带掉。
②形参为指针类型或者引用类型时:
因const对象不能被改变,所以只能被常指针指向、常引用所引,换言之,普通的指针只能指向非const对象、普通的引用只能引用非const对象。
而非const对象是可修改的变量,所以无论是普通的指针还是常指针都能指向它,无论是普通引用还是常引用都能引用它;只不过常指针指向它时或者常引用引用它时,只能读不能修改它。
反过来说:常指针可以指向常量对象也可以指向非常量对象。 普通的指针只能指向非常量对象。
常引用可以引用常量对象也可以引用非常量对象。普通引用只能引用非常量对象。
标签:函数,形参,对象,引用,第六章,实参,指针 From: https://www.cnblogs.com/newlyx/p/16833547.html