C++ 关键字explicit与函数memset()详解
2020-04-07 12:14
1371 查看
一、关键字explicit
总结:explicit关键字用在类的构造函数之前。使用环境:类构造函数只有一个参数或者其他参数都有默认参数。作用:防止类的对象参数类型进行不合时宜的转换。
#include <iostream> class CxString//没有使用explicit关键字的类声明,即默认为隐式声明 { public: char* _pstr; int _size; //CxString() {}; CxString(int size) { _size = size;//string的预设大小 _pstr =(char *) malloc(size+1);//分配string的内存 memset(_pstr,0,size+1); } CxString(const char* p) { int size = strlen(p); _pstr = (char*)malloc(size + 1); strcpy(_pstr,p); _size = strlen(_pstr); } //析构函数 }; //下面是调用 int main() { CxString string1(24); //这样是OK的,为CxString预分配24字节的大小的内存 CxString string2 = 10; //这样是OK的,为CxString预分配10字节的大小的内存 CxString string3; //这样是不行的,因为没有默认构造函数,错误为:"CxString": //没有合适的默认构造函数可用 CxString string4("aaaa"); //这样是OK的 CxString string5 = "bbb"; //这样也是OK的,调用的是CxString(const char *p) CxString string6 = 'c'; //这样也是ok的,起始调用的是CxString(int size),且size等于c的ascii码 string1 = 2; //这样也是OK的,为CxString预分配2字节的大小的内存 string2 = 3; //这样也是ok的,为CXString预分配3字节的大小的内存 string3 = string1; //这样也是ok的,至少编译是没问题的,但是如果析构函数里用free释放_pstr //内存的时候可能会报错,完整的代码必须重载运算符=,并在其中处理内幕才能释放。 }
举例:其中的
CxString string6 = 'c';就是将c的ASCII码转换为int类型的的ascii输入。
举例:上述的
CxString string6 = 'c';则编译不通过,因为编译器通过explicit关键字禁止了隐式转换,只能通过显示转换。
二、函数memset()
总结:memset(结构体/数组名 , 用于替换的ASCII码对应字符 , 前n个字符 );
memset(结构体/数组名 , "用于替换的字符“ , 前n个字符 );
函数解释:将s中的前n个字节用ch替换并且返回s
函数作用:在一段内存块中填充某一个给定的值,常用于较大的对结构体和数组的清零操作。
#include<iostream> //#include"string.h" using namespace std; int main() { char str[10]; str[9] = 'w'; memset(str, 97, 9); for (int i = 0; i < 10; i++) { cout << str[i] << " "; } return 0; }
运行结果:
参考文献:
[1]https://www.cnblogs.com/rednodel/p/9299251.html
[2]https://www.cnblogs.com/Tang-tangt/p/9342103.html
- 点赞
- 收藏
- 分享
- 文章举报