参考:C++中explicit的作用及用法
创新互联主要从事做网站、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务罗城,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792explicit
可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生,声明为explicit
的构造函数不能在隐式转换中使用#includeusing namespace std;
class Test1
{public :
Test1(int num):n(num){} //类1构造函数
private:
int n;
};
class Test2
{public :
explicit Test2(int num):n(num){} //+关键字
private:
int n;
};
int main()
{Test1 t1 = 12;
Test2 t2(13);
Test2 t3 = 14; //编译时将报错,因为拒绝了隐式转换,故无法从int转换为Test2
return 0;
}
2.definedefine
是宏定义,程序在预处理阶段将用define
定义的内容进行了 替换 。因此在程序运行时,常量表中并没有用define
定义的常量,系统不为它分配内存。同时,define
定义的常量,预处理时只是直接进行了替换,因此在编译时不能进行数据类型检验
//#define 标识符 字符串
#define MAXValue 10000 //将大值定义为10000
//#define定义函数
#define DIST(a,b) sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)) //定义距离函数
//输出
#define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x))
//多行定义
#include#include#includeusing namespace std;
#define mydefine(arg1,arg2,...) do {\
printf("Hello");\
printf("World");\
printf(arg1);\
printf(arg2);\
}while(0)
int main()
{mydefine(" I ","am");
return 0;
}
//附opencv 分水岭算法部分源码
// Create a new node with offsets mofs and iofs in queue idx
#define ws_push(idx,mofs,iofs) \
{ \
if( !free_node ) \
free_node = allocWSNodes( storage );\
node = free_node; \
free_node = storage[free_node].next;\
storage[node].next = 0; \
storage[node].mask_ofs = mofs; \
storage[node].img_ofs = iofs; \
if( q[idx].last ) \
storage[q[idx].last].next=node; \
else \
q[idx].first = node; \
q[idx].last = node; \
}
3.typedef参考:typedef用法详解
typedef与#define的区别:
(1)typedef创建的符号名只限于类型,不限于值
(2)typedef由编译器解释,不是预处理器
typedef unsigned int size;
typedef unsigned int16 u16;
typedef unsigned int8 u8;
struct students
{char sex;
char name[120];
int ages;
};
//结构体重新定义数据名常用的方法
struct students
{char sex;
char name[20]
int ages;
}std;
std.name[20]="wujunwu"
//另外也可以用typedef定义:
struct students
{char sex;
char name[20]
int ages;
};
typedef struct students std;
std.name[20]="wujunwu"
typedef char arr_name[20];
arr_name ane;
ane[20]="wujunwu"
//普通指针
int a=2;
int* pointer;
pointer=&a;
//等同于
int a=2;
typedef int* pointer;
pointer p;
p=&a;
//如果a的数据类型是char,即char a=2,则:
char a=2;
typedef int* pointer;
pointer p;
p=&(pointer)a;
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧