动态库和静态库,动态的体积小,程序运行时需要依赖使用动态库文件(.so文件)使用静态库一旦编译好,则不需要依赖静态库文件了(.a文件)
隐式调用 | 显式调用 |
---|---|
调用代码少 | 调用时加在动态库的名称和函数名称 |
调用起来和使用当前项目下的函数一样直接 | 自己加载和卸载(更合理,大项目都用显式) |
makefile中链接命令需要加入参数-l命令 | 更加灵活,必须加头文件dlfcn.h |
est1的构造函数带一个int型的参数,代码23行会隐式转换成调用Test1的这个构造函数。而Test2的构造函数被声明为explicit(显式),这表示不能通过隐式转换来调用这个构造函数,因此代码24行会出现编译错误。 普通构造函数能够被隐式调用 。而explicit构造函数只能被显式调用。
class Test1
{
public:
Test1(int n)
{
num=n;
}//普通构造函数
private:
int num;
};
class Test2
{
public:
explicit Test2(int n)
{
num=n;
}//explicit(显式)构造函数
private:
int num;
};
int main()
{
Test1 t1=12;//隐式调用其构造函数,成功
Test2 t2=12;//编译错误,不能隐式调用其构造函数
Test2 t2(12);//显式调用成功
return 0;
}