零值初始化&字符串常数作为函数模板参数
1、在定义一个局部变量时,并希望该局部变量的初始化一个值,可以显示调用其默认构造函数,使其值为0(bool类型默认值为false)。
template <typename T>
void foo()
{
T x = T();
}
类模板其成员有可能被参数化。为了确保初始化这样的成员,必须定义一个构造函数,在成员初始化列表中对每个成员进行初始化:
template <typename T>
class MyClass
{
private:
T x;
public:
MyClass:X(){}//这样做可以确保T为内置数据类型仍然可以被初始化
};
2、通过引用传递方式将字符串常数传递给函数模板参数时,有可能得到意想不到的结果:
template <typename T>
inline T const & max(T const & a, T const &b)
{
return a<b?b:a;
}
::max("12345","45678");//OK
::max("12345","ABCDEFG");//ERROR,参数类型不同
问题在于这几个字符串常数的长度不相同,因而其底层的array类型也不同。也就是说,“12345”和“45678”的array类型为char const[5],而“ABCDEFG”的array类型为char const[7]。
如果通过值传递方式将字符串常量传递给函数模板参数是,则上面的错误会变为正确:
template <typename T>
inline T max(T a, T b)
{
return a<b?b:a;
}
::max("12345","45678");//OK
::max("12345","ABCDEFG");//OK
这种方式之所以成立,是因为在引数推导过程中,只有当参数并不是一个引用类型时,数组array转变为指针的动作才会发生。如下面的例子所示:
零值初始化&字符串常数作为函数模板参数的更多相关文章
- golang之类型零值初始化及比较
综述 变量声明时未赋初值,则变量被自动赋值为该类型的零值(固定值) func new(Type) *Type new()返回一个指针,指向新分配的该类型的零值,不是空指针(nil).the value ...
- C++利用不完全实例化来获得函数模板参数的返回值和参数
有一些模板会以函数为模板参数,有时候这些模板要获得函数的返回值和参数.如在boost中的signal和slot机制,就存在这样情况. 那么,我们如何得到这些信息呢? 我们使用C++不完全实例化来实现. ...
- 04737_C++程序设计_第3章_函数和函数模板
例3.1 传对象不会改变原来对象数据成员值的例子. #define _SCL_SECURE_NO_WARNINGS #include <iostream> #include <str ...
- C/C++编程笔记:C++入门知识丨函数和函数模板
本篇要学习的内容和知识结构概览 函数的参数及其传递方式 1. 函数参数传递方式 传值: 传变量值: 将实参内存中的内容拷贝一份给形参, 两者是不同的两块内存 传地址值: 将实参所对应的内存空间的地址值 ...
- C++ Templates (1.5 重载函数模板 Overloading Function Templates)
返回完整目录 目录 1.5 重载函数模板 Overloading Function Templates 1.5 重载函数模板 Overloading Function Templates 和普通函数一 ...
- C++程序设计方法4:函数模板
函数模板 有些算法与类型无关,所以可以将函数的参数类型也定义为一种特殊的“参数”,这样就得到“函数模板” 定义函数模板的方法:template<typename T> 返回类型 函数名称( ...
- C++解析(26):函数模板与类模板
0.目录 1.函数模板 1.1 函数模板与泛型编程 1.2 多参数函数模板 1.3 函数重载遇上函数模板 2.类模板 2.1 类模板 2.2 多参数类模板与特化 2.3 特化的深度分析 3.小结 1. ...
- c++之旅:函数模板
函数模板 函数模板主要是泛型在函数的中的应用,通过泛型可以让函数处理各种各样的数据类型 简单的列子 #include <iostream> using namespace std; tem ...
- Template 基础篇-函数模板(待看
Template 基础篇-函数模板 Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第一部分. Template ...
随机推荐
- iOS调试
iOS高效调试 写代码难免出现bug.储备些调试技能绝对能够提高你的工作效率,让bug无所遁形.下面就和大家分享一些我在工作中常用的iOS调试小技能. 1. 打印 最简单,基础的调试方法就是打印日志了 ...
- Xcode Pod使用
安装pod 略.. 打开终端 cd 项目路径 (可以在xocde里项目右键show in Finder 讲工程目录拖入终端) 回车 vim podfile 回车 输入 :wq 保存 建立pod ...
- C#继承里的【就近原则】
参考博客:http://www.cnblogs.com/waynechan/p/3570702.html#2883966 参考书籍:<你必须知道的.NET>,作者王涛http://www. ...
- IOS (APP 启动 相应处理)
APP 每次启动的入口都是通过: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSD ...
- CC1310的RSSI值问题
前几日,做CC1310的通信距离测试,发现我的CC1310的板子在433MHz,50kbps下通信距离非常近,RSSI值下探至-80左右就无法正常通信,与TI宣称的-120dbm接收灵敏度差距较大.使 ...
- python时间函数学习
格式化当前日期: import time print time.strftime('%Y-%m-%d') 获取一天前的日期: import datetime import time onedayago ...
- LDAP与禅道
一:搭建禅道做测试 搭建过程参考http://www.cnblogs.com/hiyu/p/5841650.html 1):下载 ZenTaoPMS.Pro5.5.1.zbox_64.tar.gz ...
- Volley-XUtils-OkHttp三种方式实现单张多张图片上传
OkHttp可以作为Volley底层传输协议,速度更快,传大量图片建议使用.OkHttp更多功能请看OkHttp的使用 xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更 ...
- jq 部分用法
这几天一直在写前台,因为jq是在客服端处理数据的,所以公司,一般都用这种方法,下面是我这几天用到的一些东西 1.修改table表格的第一轮显示值 function changeTableRowValu ...
- 二叉树基本操作C++
#include <cstdio> #include <climits> #include <cassert> #include <iostream> ...