C++关键字总结-创新互联

C++ 关键字总结 1.explicit

参考:C++中explicit的作用及用法

创新互联主要从事做网站、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务罗城,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
  • explicit可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生,声明为explicit的构造函数不能在隐式转换中使用
  • C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色:
    • 1.构造
    • 2.是个默认且隐含的类型转换操作符
  • 解析: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.define

define是宏定义,程序在预处理阶段将用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基本数据类型取“别名”
typedef unsigned int size;
typedef unsigned int16 u16;
typedef unsigned int8 u8;
  • typedef为自定义数据类型取“别名”
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为数组取“别名”
typedef char arr_name[20];
arr_name ane; 
ane[20]="wujunwu"    
  • typedef为指针取“别名”
//普通指针
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元起,快前往官网查看详情吧


分享文章:C++关键字总结-创新互联
浏览地址:http://myzitong.com/article/dhhhsc.html