编译时根据传入参数的个数,数据类型等给函数添加修饰符,使其实质上编译成不同的函数。
根据传入的数据类型确定调用函数,
C++中NULL匹配长整型
viod print(long)
main(){
print(NULL)
}
可以输出。
实现泛型编程(Generic Programming)
template<class T>
T add(T a,T b){return a+b;}
template<typename T>
T add(T a,T b){return a+b;}
T是占位符,可用int,double 等代替。
实例化(特化)
声明后任需要实现
int a,b;
<输入a,b>
double c,d;
<输入c,d>
cout << a << "+" << b << "=" << add<int>(a+b) << endl;
cout << c << "+" << d << "=" << add<>(c+d) << endl; //<>可去
编译后add为两个不同的函数(用函数重载实现)
当输入的数据类型不同时,需要添加<>进行类型转换,否则编译报错,如
cout << a << "+" << c << "=" << add<>(a,c) << endl;
但是
cout << a << "+" << c << "=" << add<double> << endl;
可以正常编译运行,且最后返回值类型为double。
用mutable修饰结构体中的元素,即使整个结构体被声明成const型,该元素也可修改。
struct Student {
char m_cGender[2];
mutable int m_age;
}
const Student zhangsan;
可以对m_age进行修改,而对m_cGender修改则会编译报错。
用终端编译时,对所有涉及调用函数的文件都需要编译。(集成开发环境不需要)
当多个文件中有完全相同的两个函数时,编译会报错。
namespace 自定义名空间名{
...
}
嵌套名空间
namespace outer{ //外层空间
namespace inner{ //内层空间
...
}
}
::
using NS
原文:https://www.cnblogs.com/linzhuo/p/14671984.html