《C++ Primer 4.0》中的习题16.23要求尝试能否给标准函数max传递int和double类型的参数,下面是我的实测以及一个小发现(环境:VS2010, Win7 32位),
尝试一:
int i = 1;
double dn = 2.2;
cout << max(dn,i) << endl;
编译器会提示第三行错误,因为没有与max模板匹配的形参。
而进行如下修改之后,编译器可以成功编译,
尝试二:
int i = 1;
double dn = 2.2;
cout << max<double>(dn,i) << endl;
运行结果是2.2。个人认为这是因为在尝试二中max<double>为max模板指定了显示类型形参,在这种情况下编译器允许将int类型的i隐式转化为double类型,从而成功编译及运行。
下面再来验证一把:
int i = 1;
char a = 'a';
cout << max<int>(a,i) << endl;
结果是97。 Bingo~~
好吧。。。下面一题就讲这个了。。悲催。。。
分享到:
相关推荐
C++模板元编程是一种在编译时进行计算和代码生成的技术,它利用C++模板机制的强大功能,将元数据转化为可执行的代码。这一技术在提高程序效率、减少运行时开销、实现类型安全和静态多态等方面具有显著优势。在“C++...
402.10 final/override控制 442.11 模板函数的默认模板参数 482.12 外部模板 502.12.1 为什么需要外部模板 502.12.2 显式的实例化与外部模板的声明 522.13 局部和匿名类型作模板实参 542.14 本章小结 55第3章 通用为...
这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。 (2)使用引用传递函数的参数,在内存中并没有...
函数模板和普通函数区别结论: 函数模板不允许自动类型... 4 可以通过空模板实参列表的语法限定编译器只通过模板匹配 template void func(T x) { cout << "func的值是:" < T func(T x, T y) { co
2. **函数返回值类型**:在C++中,函数的返回值类型是在定义函数时指定的,不是由return语句中的表达式类型决定的。 3. **派生类与基类关系**:派生类可以公有派生、私有派生或保护派生,但必须避免二义性。赋值...
2. **C++与C语言的区别**:C++是C语言的超集,它增加了类、模板、异常处理等面向对象的特性,使得数据类型规定更为严格。题目中的判断题表明C++相比C语言在数据类型的规定上更严谨。 3. **面向对象编程的特性**:...
在描述中提到,函数模板与普通函数的主要区别在于函数模板不允许自动类型转化,而普通函数可以。这意味着当有函数模板和普通函数同时存在,且两者都能接受某种类型的参数时,调用规则会优先选择非模板的普通函数,...
**STL**(Standard Template Library,标准模板库)是一个为C++设计的强大工具库,它提供了大量的模板类和函数,可以高效地处理数据结构和算法。STL主要由以下几个部分组成: - **容器**:提供了一系列的数据结构,...
这上传的资源中包含一套我工作中常用的模板库,及不需要MFC支持的excel操作接口,导出函数调用栈(dump stack)接口,可以直接用VS2008运行TestCodeLib.sln来根据unit test来了解用法。 ⑴ 需求(requirements) 重量级...
- C++通过函数模板和类模板支持泛型编程。 这些知识点涵盖了C/C++的基本概念和技术细节,对于准备考研复试的考生来说非常重要。理解这些概念不仅有助于通过考试,还能帮助学生在未来的学习和工作中更好地运用这些...
实例化类模板时,编译器会根据提供的模板实参生成特定的类。 以上是对2022年自考程序设计试题及答案解析中涉及的C++语言知识点的详细解释,涵盖了注释、程序开发流程、运算符、内存管理、类和对象、构造函数、数组...
《C++面试题解析》 ...同时,对C++深入学习还包括模板、异常处理、STL、多态和面向对象编程等更高级的主题,这些都是面试中可能涉及的内容。在准备C++面试时,应全面复习这些知识,并通过实践加深理解。
在本专题四“函数”中,我们探讨的是编程语言中的核心概念,特别是在C/C++这两种广泛使用的编程语言中。函数是程序设计中的基本模块化工具,它允许我们将复杂的任务分解成一系列可重用的代码块。以下是这个主题涵盖...
2. **浮点数与整数混合运算**:在表达式`7.5+1/2+45%10`中,`1/2`会被转化为整数除法,结果为0,因此最终结果是`7.5 + 0 + 4 = 11.5`。 3. **字符串长度**:字符串"ab\n\\012\\\""包含了9个字符,包括结束符`\0`。 ...
1. **基础知识掌握**:学生应能够使用C++语言和面向对象技术来解决复杂的软件工程问题,包括但不限于抽象、封装、继承、多态、输入输出、模板等基本概念和技术。 2. **应用与分析能力**:学生应该能够比较和评估不同...
9. **指针和STL**:在标准模板库(STL)中,指针与容器(如vector、list)和迭代器的关系,以及在模板编程中的应用。 10. **指针在C++对象模型中的角色**:了解指针对象和成员函数的影响,以及在继承和多态中的作用...
【C面试笔试222汇总打包】这篇内容涵盖了C语言及C++面试中常见的知识点,主要包括头文件的包含方式、头文件的作用、函数参数传递、内存分配方式、双向链表操作以及程序入口、Windows消息机制、回调函数定义、C++程序...
<br>实验四 综合(课程设计) 内容及步骤: 1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素...
- 对于虚拟类型参数所对应的模板实参,如果可以从模板函数的实参中获得相同的信息,则可以省略。 #### 16. 输入流类成员函数 `getline()` - `getline()`函数用于读取键盘输入的字符串,可以包含空格。 - 读取的...
- **解释**: 在C/C++中,除了数组名,还可以使用其他指针类型作为实参传递给形参为指针的函数。 ### 17. Windows中的文件选择 - **知识点**: 在Windows中选定几个连续的图标,可用鼠标单击第一个图标,然后按住...