解析C++老手也会出现的问题

对于刚刚接触到C++的用户来说,C++确实拥有比别的开发语言更复杂的问题, 学习C++时应该注意由易至难,循序渐进,要成为C++老手,不是那么容易的,必须要花很大的努力。

创新互联成立与2013年,是专业互联网技术服务公司,拥有项目做网站、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元宛城做网站,已为上家服务,为宛城各地企业和个人服务,联系电话:13518219792

如:const int a;和int const b;中,虽然两种具有相同的意义,但是最好利用后面的那种情况,后面的更加可读,因为:int const我们可以很清楚地看到const是修饰int,而前面的那种方法中,我们就不那么轻易知道到底const 的具体涵义。由后面的那种方法我们可以知道const指一个恒定的整形。Int *const b,指的是一个恒定的指针b,这个指针指向一个整型。

所以这个指针的内容可以改变,但是它的指针值也就是b的值不能变,相应的int const *b,指的是一个指向恒定整型内容的指针b,也就是说这个b的内容可以变,但是开始的b所指向的地址中的内容不能在程序当中通过b来改变。volatile对上面的原则也适用,使用类型T做为类型变量已经作为了模板参数的惯例,用来表示函数或者类所接受的类型参量可以用所有的类型。#t#

在C++的模板的类型参量前,最好尽量使用typename来代替class。在编译时期,模板被编译两次;实例化之前:检查模板代码本身,查看语法是否正确;在实例化期间,检查模板代码,查看是否所有的调用都有效。

当使用函数模板,并且引发模板实例化的时候,编译器需要查看模板定义。在函数实参的类型的推导中,如果类型出现不匹配现象则会出现编译错误。如果要解决这编译错误则有以下几种方法解决:对传入的实参进行类型转换成匹配类型后传入。显示指定模板函数的全特化(不能为偏特化,因为函数不支持偏特化)类型。

例子如下所示:

 
 
 
  1. template < typename T > 
  2. T  & max(T  & value1,T  & value2)
  3.    return  value1 > value2 ? value1:value2;
  4.  
  5. 调用max( 3 , 4.1 )会出现编译错误,解决的办法:
  6.  1 .max(static_cast < double > ( 3 ), 4.1 );
  7.  2 .max < double > ( 3 );
  8.  3 .将函数的模板参数从一个改为两个。

在模板函数内部不能指定默认的模板参数。函数不能采用偏特化的方法来实现类型的递归,但是它可以利用函数重载的方法来实现类型的转换。相对于8而言类能使用偏特化的方法来实现类型的递归。

并且它的仿函数也可以使用重载operator()来实现函数重载方法。但是它的一个问题就是在调用仿函数的时候一定要加上它的实例化参数类型,以及调用它的构造函数。函数调用的时候可以采用由参数的类型来反推函数的模板参数,这是仿函数所不能的。所以我们在编程的过程当中一定要注意这些不同技术之间的优点和不足,看看哪些更适合我们。

在调用非标准函数的时候最好要与调用标准函数区分开来,这样不致于使用程序产生歧义的错误。做法是:在变量或者函数的前面加上全局标识符。

网站名称:解析C++老手也会出现的问题
链接URL:http://www.hantingmc.com/qtweb/news2/218802.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联