C++老手也要注意的几个"小"问题

转载 2007年09月28日 16:29:00

第一条就是: const原则:在C++中最好趋向与使用const来修饰它前面的那个类型。

如: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做为类型变量已经作为了模板参数的惯例,用来表示函数或者类所接受的类型参量可以用所有的类型。

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

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

 

template < typename T >
& max(T  & value1,T  & value2)
{

  
return  value1 > value2 ? value1:value2;
}


调用max(
3 , 4.1 )会出现编译错误,解决的办法:
1 .max(static_cast < double > ( 3 ), 4.1 );
2 .max < double > ( 3 );
3 .将函数的模板参数从一个改为两个。


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

相对于8而言类能使用偏特化的方法来实现类型的递归,并且它的仿函数也可以使用重载operator()来实现函数重载方法。但是它的一个问题就是在调用仿函数的时候一定要加上它的实例化参数类型,以及调用它的构造函数。

函数调用的时候可以采用由参数的类型来反推函数的模板参数,这是仿函数所不能的。所以我们在编程的过程当中一定要注意这些不同技术之间的优点和不足,看看哪些更适合我们。

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

 

相关文章推荐

Metasploit安裝時要注意的幾個問題

Metasploit下載地址(現在的最新版本是4.3):http://www.metasploit.com/download/         安裝環境:Windows XP SP3 無安全...

java程序员在面试时要注意的几个问题

原文地址:http://www.itjhwd.com/javacxymszy/ 身为一名Java程序员,在面试的时候常常被问到的,下面我总结一些常常别问到的问题。 ...

Java可变参数(...)方法重载时要注意的几个问题

转载地址:http://www.blogjava.net/rongxh7/archive/2010/04/18/318698.html Java可变参数方法重载时要注意的几个问题 ...

ASSERT()和assert() | const,static和volatile要注意的几个问题 |define宏与const区别

ASSERT ()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判...

java学习笔记---Java可变参数方法重载时要注意的几个问题

转载自:http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客) Java可变参数方法重载时要注意的几个问题 JDK1.5引进了方法的可变参数,受到许多开发...

Java可变参数方法重载时要注意的几个问题

JDK1.5引进了方法的可变参数,受到许多开发人员的青睐。有了这种机制,我们可以写出类似于JavaScript的arguments那样的带任意多个参数的方法。Java的可变参数,可用于普通方法上,也可...
  • foart
  • foart
  • 2011-01-03 17:12
  • 1350

java程序员在面试时要注意的几个问题

身为一名Java程序员,在面试的时候常常被问到的,下面我总结一些常常别问到的问题。 1.HashMap和Hashtable之间的区别   经常问到。这两个都是Map接口的类,实现了将唯一键...

Java中要注意的几个问题

对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。...

c/c++ 处理字符串时要注意的问题

c/c++ 处理字符串时要注意的问题。 最近在写一个文件操作的时候,出现了一点儿问题。虽不是大问题,但是不注意的话会产生错误。 写了一个块读取的方法。 从inf 流中,最多读取num个字...

学好C++必须要注意的十八个问题

学好C++必须要注意的十八个问题 转自  http://blog.chinaunix.net/uid-7396260-id-2056691.html 一、#include “fil...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)