首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C++中使用void swap()将这个函数模板化时,有没有什么巧合?

在C++中使用void swap()将这个函数模板化时,有一个巧合是与标准库中的std::swap()函数名称相同。这是一个巧合,因为在C++标准库中已经定义了一个名为std::swap()的函数模板,用于交换两个对象的值。

使用void swap()将函数模板化时,可以根据需要定义不同类型的swap函数,以实现对不同类型对象的值交换操作。这样可以提高代码的复用性和灵活性。

在C++中,函数模板是一种通用的函数定义,可以用于不同类型的参数。通过使用模板参数,可以在编译时生成特定类型的函数代码。对于swap函数,可以使用函数模板来实现对不同类型对象的值交换操作。

巧合在于,当我们使用void swap()将函数模板化时,函数名称与标准库中的std::swap()函数名称相同。这可能会导致命名冲突或者编译错误。为了避免这种冲突,可以使用命名空间来区分不同的swap函数。

例如,可以将自定义的swap函数放在自定义的命名空间中,如namespace MySwap{},这样就可以避免与标准库中的std::swap()函数冲突。

总结起来,使用void swap()将函数模板化时,与标准库中的std::swap()函数名称相同是一个巧合,需要注意命名冲突的问题,并可以通过使用命名空间来避免冲突。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++篇】引领C++模板初体验:泛型编程的力量与妙用

第一章: 初始模板函数模版 1.1 什么是泛型编程? 泛型编程(Generic Programming)是C++的一种编程范式,旨在编写与数据类型无关的通用代码。...因为模板只有在编译期被实例化,链接器链接时无法看到模板的定义,除非在编译时所有模板的实例化代码都可见。如果定义.cpp文件,其他使用模板的编译单元无法找到这个定义,导致链接器报错。...总结: 类模板的代码只有实例化时才生成,因此类模板的定义必须在每个使用它的编译单元可见。模板的声明和定义放在同一个头文件,可以确保模板实例化时能够访问到其定义,避免链接错误。...这也是为什么大多数C++开发者在编写模板时会将模板的实现放在头文件的原因。...以上就是关于【C++篇】引领C++模板初体验:泛型编程的力量与妙用的内容啦,之后会有另一篇博客来讲解有关模板的更多进阶内容,敬请期待哦,然后各位大佬有什么问题欢迎评论区指正,或者私信我也是可以的啦,

17710

c++】初阶模版与STL简单介绍

泛型编程,通常会使用到“泛型”这个概念,它允许你定义函数、类或接口时使用类型参数,这个类型参数随后可以使用函数、类或接口时被具体的类型所替换。...这样,同一套逻辑就可以适用于多种数据类型,而不需要为每种类型编写重复的代码 C++,可以使用模板(template)来实现泛型编程 2.函数模板 函数模板代表了一个函数家族,该函数模板与类型无关...所以其实模板就是本来应该我们做的重复的事情交给了编译器 所以这里调用的并不是我们的模版void Swap(T& left, T& right),编译器会根据我们的调用进行类型推导 函数模板的调用...Add(a1, d1); 该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演其实参类型通过实参a1T推演为int,通过实参d1T推演为double类型,但模板参数列表只有一个T...,编译器无法确定此处到底该T确定为int或者 double类型而报错 注意:模板,编译器一般不会进行类型转换操作 此时有两种处理方式: 用户自己来强制转化 使用显式实例化 强制转换: Add(

10510
  • C++函数模板模板函数)详解

    C++函数模板模板函数)详解 定义 用法: 函数模板的原理 延申用法 2.1为什么需要类模板 2.2单个类模板语法 2.3继承的类模板语法 案例1: 案例2: 2.4类模板的基础语法 2.5类模板语法知识体系梳理... C++ 模板分为函数模板和类模板两种。 函数模板是用于生成函数; 类模板则是用于生成类的。...于是编译器就自动用 int 替换 Swap 模板的 T,生成上面的 Swap 函数,将该 Swap 函数的源代码加入程序中一起编译,并且Swap(n, m);编译成对自动生成的 Swap 函数的调用...编译器由模板自动生成函数的过程叫模板的实例化。由模板实例化而得到的函数称为模板函数某些编译器模板只有在被实例化时,编译器才会检查其语法正确性。...2.7类模板项目开发的应用 小结 模板C++类型参数化的多态工具。C++提供函数模板和类模板模板定义以模板说明开始。类属参数必须在模板定义至少出现一次。

    1.7K40

    C++从入门到精通——模板

    如果在C++,也能够存在这样一个模具,通过给这个模具填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),那将会节省许多头发。巧的是前人早已将树栽好,我们只需在此乘凉。...模板参数可以函数模板定义的任何地方使用函数模板的实例化是通过调用函数时根据实际参数类型来自动生成具体的函数。编译器根据调用的参数类型匹配合适的函数模板实例化,并生成对应的函数代码。...T> void Swap(T& left, T& right) { T temp = left; left = right; right = temp; } ps:C++里可以直接使用swap...我们也可以使用auto做返回值来推,系统会自动匹配最优的 示例 对于这个函数,func(1)直接调用会出错,因为系统不能推出T的类型是什么,这时候我们必须使用显试实例化 auto做模板函数的返回值...auto作为返回值类型时,编译器会根据实际参数来推导出返回类型,因此模板函数被实例化时,返回值类型会被具体确定。

    10010

    C++】初阶模板

    函数模板 很多时候,我们在编程时会遇到这样的情形,如在通讯录程序,我们想要实现两个联系人的信息互换,如我们要将张三和李四除了姓名之外的所有信息做交换: 这个时候因为交换的数据类型并不相同...,就需要我们编写很多Swap交换函数来完成这一功能,如: 仔细观察可以发现,这三个Swap交换函数除了参数类型不同,其余的函数逻辑是一模一样的,那么有没有一种方法可以简化这种重复又烦琐的工作呢...比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此....,需要推演其实参类型 通过实参a1T推演为int,通过实参d1T推演为double类型,但模板参数列表只有一个T, 编译器无法确定此处到底该T确定为int 或者 double类型而报错 注意...:模板,编译器一般不会进行类型转换操作,因为一旦转化出问题,编译器就需要背黑锅 */ // 此时有两种处理方式:1.

    9010

    C++函数

    引 关于C++函数有很多知识,因为其函数有多种变体,可以说C++创作者为了开发方便,打开了很多个后门让编程人员随心所欲地炫技使用,但私以为这也造成了使用函数时的复杂度,如果真的代码中使用各种变体,虽然确实可以让代码看上去简洁高级...函数原型 什么函数原型?为什么要用原型?...语言下使用宏来实现: #define SQUARE (X) X*X 默认参数 和python一样,c++允许给函数的参数设置默认值,如果在调用时没有给对应参数赋值,那么函数使用默认值,方法其实就是声明函数原型时同时声明参数的默认值...函数模板 为了炫技,c++又定了函数模板这种幺蛾子,它定义一种通用函数函数的实现方法一致,但是不限死参数类型,也就是说同一个函数,你传的参数可以是int型,也可以是double型。...显示具体化 上面的函数模板让所有的参数类型使用同一个函数代码块执行同一种操作,如果我这时候又想对某个特定类型做不同的操作怎么办?就你名堂多。 一种方法是使用函数重载。

    32710

    C++:模版初阶 | STL简介

    注:其实swap函数C++的标准库提供了,不需要自己写,这边只是举个例子 void Swap(int& left, int& right) { int temp = left; left = right...,typename Tn> 返回值类型 函数名(参数列表){} 根据这个格式我们造出swap函数的模版  template void Swap( T& left, T& right...) 2.2 函数模板的原理 现在我们尝试使用这个模具 那这两个函数都是调用这个模版函数吗?? ...原因:该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演其实参类型通过实参a1T推演为int,通过实参d1T推演为double类型,但模板参数列表只有一个T,编译器无法确定此处到底该...2、 对于非模板函数和同名函数模板,如果其他条件都相同,调动时会优先调用非模板函数而不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数, 那么选择模板  3.

    14110

    C++模板初阶:泛型编程的起点

    C++模板可以分为函数模板和类模板: 在学习模板之前我们先要了解一下什么是泛型编程 1.泛型编程 泛型编程是一种编程范式,它允许在编写代码时使用一种通用的数据类型或算法,以便在不同的数据类型上进行操作...模板是泛型编程的基础。 C++使用函数模板、类模板和STL(标准模板库)等机制来实现泛型编程。其他编程语言如Java和C#也提供了类似的泛型编程机制。...我们需要不同材料的铸件,只需要在一个模具里倒入不同的材料即可,模板就类似于这个模具,与类型无关,使用时被参数化,并根据实参类型产生函数的特定类型版本。...该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演其实参类型通过实参a1T推演为int,通过实参d1T推演为double类型,但模板参数列表只有一个T,编译器无法确定此处到底该...return 0; } 这样不管后面的形参时什么类型,编译器都会实例化为int类型的Add函数; 2.5 模板参数的匹配原则 ✨ 1.一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个模板函数

    12710

    25.C++- 泛型编程之函数模板(详解)

    本章学习: 1)初探函数模板 2)深入理解函数模板 3)多参函数模板 4)重载函数函数模板 ---- 当我们想写个Swap()交换函数时,通常这样写: void Swap(int& a, int& b...所以C++引入了泛型编程概念 C++里,通过函数模板和类模板来实现泛型编程(类模板在下章讲解) 函数模板 一种特殊的函数,可通过不同类型进行调用 函数模板C++重要的代码复用方式 通过template...关键字来声明使用模板 通过typename关键字来定义模板类型 比如:   template //声明使用模板,并定义T是一个模板类型 void Swap(T&...函数模板使用 分为自动调用和显示调用 例如,我们写了一个Swap函数模板,然后main()函数里写入: int a=0; int b=1; Swap(a,b);...+, Java,Pascal,Ruby, 深入理解函数模板什么函数模板能够执行不同的类型参数?

    98340

    C++C++模板基础知识篇

    那么他们调用的函数是同一个吗? 其他并不是。调试的时候进去的确实是void Swap(T& x, T& y),这个只是编译器方便调试所展示出来的。...所以其实模板就是本来应该我们做的重复的事情交给了编译器 C++里面就有模板 在编译器编译阶段,对于模板函数使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。...所以之后写swap时候直接就能用 2.4 函数模板的实例化 编译通过推出类型,用函数模板,生成对应的函数这个过程叫做模板实例化。 用不同类型的参数使用函数模板时,称为函数模板的实例化。...显式实例化:函数名后的中指定模板参数的实际类型 想要什么类型就用什么函数名后的加什么类型。 如果类型不匹配,编译器会尝试进行隐式类型转换,如果无法转换成功编译器将会报错。...类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟,然后实例化的类型放在即可,类模板名字不是真正的类,而实例化的结果才是真正的类。

    10410

    C++】泛型编程——模板初阶

    C语言中肯定是没法解决这个问题的,不过我们之前学习过C++里支持函数重载,所以呢,我们就可以这样搞: void Swap(int& left, int& right) { int temp =...那如果在C++,也能够存在这样一个模具就好了: 通过给这个模具填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),那将会节省许多头发。...另外再给大家提一个东西就是: 其实swap这个函数C++库里面是提供了的,我们可以直接用: 不过库里面的是小写,我们自己刚才的写成大写区分一下,所以以后我们再用swap就不用自己写了。...因为这时候函数模板推演实例化的时候会出现歧义: 该语句不能通过编译,因为在编译期间,该函数模板实例化时,需要推演其实参类型。...,类模板实例化只能显式实例化,即需要在类模板名字后跟,然后实例化的类型放在即可。

    14010

    C++修炼之路】7. 模板初阶

    代码的可维护性比较低,一个出错可能所有的重载均出错 因此,为了防止并优化以上情况,我们引入了泛型的函数模板 如果在C++,也能够存在这样一个模具,通过给这个模具填充不同材料(类型),来获得不同材料的铸件...函数模板 2.1 函数模板的概念 函数模板代表了一个函数家族,该函数模板与类型无关,使用时被参数化,根据实参类型产生函数的特定类型版本。...所以其实模板就是本来应该我们做的重复的事情交给了编译器 在编译器编译阶段,对于模板函数使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。...: 即两种函数调用都是该函数的机器指令被存放在代码段,对于函数模板来说:我们使用相同类型的参数多次调用同一模板函数时,也只会实例化一个模板。...对于类模板来说,必须实例化才能在定义时去推演指定的类,如果不在初始化时推演就会报错: 这是因为初始化时会自动调用构造函数的初始化列表,因此初始化我们就必须明确具体类型,否则无法进行初始化。

    34600

    C++】模版【初阶】

    个人主页:小张同学zkf ⏩ 文章专栏:C++ 若有问题 评论区见 欢迎大家点赞收藏⭐文章 1.泛型编程 我们先来看三个函数 void Swap ( int & left , int...如果在 C++ ,也能够存在这样一个 模具 ,通过给这个模具 填充不同材料 ( 类型 ) ,来 获得不同 材料的铸件 ( 即生成具体类型的代码) ,那将会节省许多头发。...模板 是泛型编程的基础 。 2.函数模版 2.1 函数模板概念 函数模板代表了一个函数家族,该函数模板与类型无关,使用时被参数化,根据实参类型产生 函数的特定类型版本。...对于非模板函数和同名函数模板,如果其他条件都相同,调动时会优先调用非模板函数而 不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数, 那么选择模 板 3....,下片就正式进入C++STL学习 OK,感谢观看!!!

    7810

    C++的标准化工厂—— 模板

    如果在C++,也能够存在这样一个模具,通过给这个模具填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),那将会节省许多头发。巧的是前人早已将树栽好,我们只需在此乘凉。...模板是泛型编程的基础。 2. 函数模板 2.1 函数模板概念 函数模板代表了一个函数家族,该函数模板与类型无关,使用时被参数化,根据实参类型产生函数的特定 类型版本。...,需要推演其实参类型 通过实参a1T推演为int,通过实参d1T推演为double类型,但模板参数列表只有一个T, 编译器无法确定此处到底该T确定为int 或者 double类型而报错 注意:模板...一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个模板函数。...:声明,类外定义。

    73410

    C++函数模板与类模板

    这时C++就有了模板函数模板 概念与格式 函数模板,也是一种函数。...cout << x << ' ' << y << endl; } int main() { int x = 1; double y = 2.0; Swap(x, y);//这里是我们模板参数的...模板参数的匹配 有没有想过一个问题,如果有一个模板函数实例化出来的函数和已经存在的函数是一样的怎么办?...(也就是模板类)的过程是不可能隐式实例化的,因为创建一个模板类时,最先调用的时构造函数,但是构造函数不一定就要传参或者是模板参数类型,所以编译器无法推演,你直接告诉编译器把N都变成int类型就好了。...(函数定义的地方才是放入符号表的地址) 我们创建实例化时,能实例化的只有声明,因为模板是一个蓝图,没有定义只有声明就无法实例化,另一个源文件在有函数定义的文件里又没有实例化,所以就无法放入符号表

    79500

    C++】你想要的——印刷模板

    一个Swap模板,但是我可以用不同的类型去实现这个模板,继而试用它。...如果在 C++ ,也能够存在这样一个 模具 ,通过给这个模具 填充不同材料 ( 类型 ) ,来 获得不同材料的铸件 ( 即生成具体类型的代码)。...因为推演void Swap(T& left, T& right);时,T的类型不明确,就会发生错误(推演报错),直接报错  但如果不用模板,我们自己这样: void Swap(int& left, int...,必须强转,不然还是和之前问题一样,该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演其实参类型通过实参a1T推演为int,通过实参d1T推演为double类型,但模板参数列表只有一个...函数名后加入了指定模板参数后,就会在实例化时,T直接是指定的类型,这样就会发生隐式类型转换。

    40830

    C++第八弹 -- 模板与STL简介

    如果在C++,也能够存在这样一个模具,通过给这个模具填充不同材料(类型),来获得不同材料的铸件 (即生成具体类型的代码),那将会节省许多头发。巧的是前人早已将树栽好,我们只需在此乘凉。...模板是泛型编程的基础。 2. 模板函数 2.1 概念 函数模板代表了一个函数家族,该函数模板与类型无关,使用时被参数化,根据实参类型产生函数的特定 类型版本。...使用显式实例化 Add(a, (int)d); return 0; } 显式实例化:函数名后的中指定模板参数的实际类型 int main(void) { int a = 10; double...:声明,类外定义。...我们后面学习STL要阅读部分源代码,主要参考的就是这个版本 3. 组件 总结 本文介绍了C++模板和标准模板库(STL)。

    7410

    C++模板(上)

    前言 本文介绍了C++模板的基础概念,简单介绍了泛型编程,模板,以及模板函数模板与类模板等相关概念。 ---- 一、泛型编程 如何实现一个通用的交换函数(任何类型的参数都可以使用)呢?...代码如下: void Swap(int& x, int& y) { int temp = x; x = y; y = temp; } void Swap(double& x, double& y)...C++,存在着这样一个模具,通过给这个模具填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码)。 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。...模板类: 主要描述的是类,这个使用模板进行声明。模板的虚拟类型参数指定成一个具体的数据类型参数。通俗一点说,可以看作用模具做出来的蛋糕。...总结 以上就是今天要讲的内容,本文介绍了C++模板的基础概念。本文作者目前也是正在学习C++相关的知识,如果文章的内容有错误或者不严谨的部分,欢迎大家评论区指出,也欢迎大家评论区提问、交流。

    40540

    C++心决之初阶模板+stl简介(STL前言)(想要入门stl模板,这篇值得一看)

    void Swap(int& left, int& right) { int temp = left; left = right; right = temp; } void Swap(double...模板是泛型编程的基础 2. 函数模板 2.1 函数模板概念 函数模板代表了一个函数家族,该函数模板与类型无关,使用时被参数化,根据实参类型产生函数的特定 类型版本。...,需要推演其实参类型 通过实参a1T推演为int,通过实参d1T推演为double类型,但模板参数列表只有一个T, 编译器无法确定此处到底该T确定为int 或者 double类型而报错 注意...:声明,类外定义。...什么是STL STL(standard template libaray- 标准模板库 ) : 是 C++ 标准库的重要组成部分 ,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架

    6810

    c++模板---函数模板模板

    如果在C++,也能够存在这样一个模具,通过给这个模具填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),那将会节省许多头发。...模板是泛型编程的基础 2.函数模板 2.1函数模板概念 函数模板代表了一个函数家族,该函数模板与类型无关,使用时被参数化,根据实参类型产生函数的特定类型版本 2.2函数模板格式 template...本质是什么,重复的工作交给了机器去完成 有人给出了论调:懒人创造世界 函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。...使用显式实例化 Add(a1, (int)d1); return 0; } 2.显式实例化 函数名后的中指定模板参数的实际类型 int main(void) { int a = 10; double...:声明,类外定义。

    7010
    领券