C++函数参数的编写
添加时间:2013-7-19 点击量:
参数的编写涉及到很多重视点,包含传值还是传地址,传地址的话选择指针还是引用,是否添加const。
1. 传值还是传地址。
(1)若是是int这种简单内置类型,然后又不须要传出批改的成果的话,就用传值,如void Test(int a); 这时辰毫无疑问不须要应用 void Test(cont int a); 原因是函数编写和调用都麻烦,很诡异。然则有的人可能会想,是不是如许会进步效力。然则其实是错的,因为指针本身也是一个32位的值,就像int一样,所以若是是简单内置类型,这种景象还是选择老忠诚实的传值吧。有的人,包含曾经的本身会极端的试图应用void Test(const int& a); 也是以进步效力的名义,然则还是错的,因为引用其实本质上用到了指针,两者是一伙的。
(2)若是是布局类型或者类类型,能传地址就传地址。来由很简单,进步效力。有的人会辩驳说,我的这个布局或者类很小的,影响不大,我就喜好传值。那我要否决这种辩驳,你怎么知道在N天之后,这个布局或者类不会变大呢?
2. 传地址选择指针还是引用。
(1)起首,引用跟指针是有区此外,引用不克不及为空,引用不克不及批改引用的对象。在引用初始化的时辰,就断定了它所引用的对象,若是int a = 0; int& b = a; 若是你来个int c = 1; b = c; 有的初学者会认为此时b变成引用c了,其实错了。引用比我们想象的专一,b始终引用着a,执迷不悟。b = c; 其实是批改了a对应的内存中的值,所以此时,a和b都变成了1。
(2)有的概念认为,除非你要指向NULL或者批改指向,,不然你就应当用引用,而不是指针。我根蒂根基认同这个概念,引用可以认为是更严格的指针,能应用更严格的指针就应用它,这就像能应用const的时辰就应用它一样,根蒂根基正确。然则比来看了下Google C++的编程规范,里面讲到了传入参数用const引用,传出参数用指针,有它的事理。若是传出参数应用引用,比如void Test(CString& a),固然可以规定说,const CString&,默示不会批改引用的对象,CString& 默示批改了引用的对象,然则仅看调用方的代码,Test(temp),你是看不出来形参是CString呢,还是CString&的,所以就愁闷了。所以Google的规范还是有事理的,传出参数同一用指针,调用的时辰就是Test(&temp); 别人一看这代码,一想规矩就知道,这里必然把temp批改了。
3. 是否为const
(1)若是是传值,比如int,这种的话不管是否为const,都不会批改调用方的值,这里const限制的是参数在函数内是否可被批改。这种景象一般不须要加const,除非你须要明白禁止在函数内批改。
(2)若是是传地址。const与指针和引用连络能阐扬很大的感化,比如const CString&, const CString, 当你断定在函数内不会批改指向的值时,就应当加上const,一来可以防止你在编写函数的时辰不警惕批改,而来可以明白的告诉调用方,宁神的传进来吧,我不会批改你的。还有一个益处是,调用方拿着一个const CString& 或 const CString 的时辰,他不消恶心的来个const_cast<CString&> 或 const_cast<CString>。
我俩之间有着强烈的吸引力。短短几个小时后,我俩已经明白:我们的心是一个整体的两半,我俩的心灵是孪生兄妹,是知己。她让我感到更有活力,更完美,更幸福。即使她不在我身边,我依然还是感到幸福,因为她总是以这样或者那样的方式出现在我心头。——恩里克·巴里奥斯《爱的文明》
参数的编写涉及到很多重视点,包含传值还是传地址,传地址的话选择指针还是引用,是否添加const。
1. 传值还是传地址。
(1)若是是int这种简单内置类型,然后又不须要传出批改的成果的话,就用传值,如void Test(int a); 这时辰毫无疑问不须要应用 void Test(cont int a); 原因是函数编写和调用都麻烦,很诡异。然则有的人可能会想,是不是如许会进步效力。然则其实是错的,因为指针本身也是一个32位的值,就像int一样,所以若是是简单内置类型,这种景象还是选择老忠诚实的传值吧。有的人,包含曾经的本身会极端的试图应用void Test(const int& a); 也是以进步效力的名义,然则还是错的,因为引用其实本质上用到了指针,两者是一伙的。
(2)若是是布局类型或者类类型,能传地址就传地址。来由很简单,进步效力。有的人会辩驳说,我的这个布局或者类很小的,影响不大,我就喜好传值。那我要否决这种辩驳,你怎么知道在N天之后,这个布局或者类不会变大呢?
2. 传地址选择指针还是引用。
(1)起首,引用跟指针是有区此外,引用不克不及为空,引用不克不及批改引用的对象。在引用初始化的时辰,就断定了它所引用的对象,若是int a = 0; int& b = a; 若是你来个int c = 1; b = c; 有的初学者会认为此时b变成引用c了,其实错了。引用比我们想象的专一,b始终引用着a,执迷不悟。b = c; 其实是批改了a对应的内存中的值,所以此时,a和b都变成了1。
(2)有的概念认为,除非你要指向NULL或者批改指向,,不然你就应当用引用,而不是指针。我根蒂根基认同这个概念,引用可以认为是更严格的指针,能应用更严格的指针就应用它,这就像能应用const的时辰就应用它一样,根蒂根基正确。然则比来看了下Google C++的编程规范,里面讲到了传入参数用const引用,传出参数用指针,有它的事理。若是传出参数应用引用,比如void Test(CString& a),固然可以规定说,const CString&,默示不会批改引用的对象,CString& 默示批改了引用的对象,然则仅看调用方的代码,Test(temp),你是看不出来形参是CString呢,还是CString&的,所以就愁闷了。所以Google的规范还是有事理的,传出参数同一用指针,调用的时辰就是Test(&temp); 别人一看这代码,一想规矩就知道,这里必然把temp批改了。
3. 是否为const
(1)若是是传值,比如int,这种的话不管是否为const,都不会批改调用方的值,这里const限制的是参数在函数内是否可被批改。这种景象一般不须要加const,除非你须要明白禁止在函数内批改。
(2)若是是传地址。const与指针和引用连络能阐扬很大的感化,比如const CString&, const CString, 当你断定在函数内不会批改指向的值时,就应当加上const,一来可以防止你在编写函数的时辰不警惕批改,而来可以明白的告诉调用方,宁神的传进来吧,我不会批改你的。还有一个益处是,调用方拿着一个const CString& 或 const CString 的时辰,他不消恶心的来个const_cast<CString&> 或 const_cast<CString>。