//普通函数 和 函数模板 区别
int myPlus(int a, int b)
{return a + b;
}template<class T>
T myPlus2(T a, T b)
{return a + b;
}void test01()
{int a = 10;int b = 20;char c = 'c';cout << myPlus(a, c) << endl; //隐式类型转换 将 char c转为 int类型//myPlus2(a, c); //自动类型推导方式 ,不可以进行隐式类型转换的,但是显示指定类型方式可以进行隐式类型转换}//普通函数 和 函数模板 调用规则
template<class T>
void myPrint(T a, T b)
{cout << "函数模板调用" << endl;
}/*
//假设传入T是int类型 ,生成一个 下面的函数,这个函数 称为 模板函数
void myPrint(int a, int b)
{
cout << "函数模板调用" << endl;
}
*/
template<class T>
void myPrint(T a, T b , T c)
{cout << "函数模板调用myPrint(T a, T b , T c)" << endl;
}void myPrint(int a, int b)
{cout << "普通函数调用" << endl;
}void test02()
{//1、如果普通函数和函数模板可以同时调用,优先使用是普通函数int a = 0;int b = 0;//myPrint(a, b);//2、如果想强制调用 函数模板中的内容,可以使用空参数列表//myPrint<>(a, b);3、函数模板 可以发生函数重载//myPrint(a, b, 10);//4、如果函数模板可以产生更好的匹配,那么优先使用是函数模板char c = 'c';char d = 'd';myPrint(c, d);
}
int main(){//test01();test02();system("pause");return EXIT_SUCCESS;
}
普通函数和函数模板的区别以及调用规则 1.1 区别: a. 普通函数可以隐式类型转换 b. 函数模板如果是自动类型推导的使用方式, 是不可以发生隐式类型转换 如果函数模板在调用的时候显示的指定了T的类型,是可以发生隐式类型转换的。 比如 funcTemplate(a, b); 1.2 调用规则: a. 如果函数模板和普通函数都可以实现调用, 那么优先调用的是普通函数 b. 可以通过空参数列表语法来强制调用 函数模板 c. 函数模板也可以发生函数重载 d. 如果函数模板可以产生更好的匹配, 优先使用的是函数模板
1.int * p NULL;和*p NULL的区别
1 .int * p NULL
int *pNULL;定义一个指针变量p,其指向的内存里面保存的是int类型的数据;再定义变量p的同时把p的值设置为0x00000000, 而不是把*p的值设置为0x00000000
2.*p NULL
int i 10&am…
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;template<class T>
class Base
{T m_A; //子类创建时候 必须要知道T的类型,才能给父类中的m_A分配内存
};template<class T1 , class T2>
class Son :public Base<T2…
一条语句判断数x是否2的n次幂
return !(x & (x - 1));
求取十进制数字元素1的个数
int fun(int x) { int count 0; int i, j, k; /方法2 负数不可计算,需要改进/ while (x ! 0){ if (x & 1 1) count; x x >> 1; } /方法1/ while (x …