
c++
文章平均质量分 55
「已注销」
这个作者很懒,什么都没留下…
展开
-
define中#和##以及__VA_ARGS_
经常看到别人写的代码中define有特殊操作符#和##。接下来就让我们看看他们代表的具体意思:(1)#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化。例如:#incldue <stdio.h>#define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x))原创 2021-02-25 15:53:01 · 462 阅读 · 0 评论 -
C++如何输入含空格的字符串
C++如何输入含空格的字符串1、scanf函数(包含头文件#include <stdio.h>) scanf函数一般格式为scanf(“%s”,st),但scanf默认回车和空格是输入不同组之间的间隔和结束符号,所以输入带空格,tab或者回车的字符串是不可以的。解决方法如下: 1)利用格式符“%[]”它的作用为扫描字符集合。Scanf(“%[^c]”,str); 其中“c”...原创 2018-10-09 15:38:14 · 33455 阅读 · 3 评论 -
int *p[10]和int (*p)[10]
int *p[10] 指的指针数组 他是个数组 有10个元素 每个元素是int*类型也就是指向int的指针 也就是存放10个int指针变量int (*p)[10] 指的数组指针他是指针 指向一个含有10个元素的数组 主要用在函数的参数上面,主要用于约束参数数组的长度。...原创 2018-09-28 15:48:30 · 2777 阅读 · 0 评论 -
宏定义参数加括号
加括号是为了处理表达式参数(即宏的参数可能是个算法表达式)时不出错,因为宏替换就是文本替换。比如以下情况:#define COM(A,B) (A)*(B)那么COM(6+5,3)它会换成这样: (6+5)*(3)显然这是和COM宏的意图一致的,但是如是去掉了定义中括号,即写成这样:#define COM(A,B) A*B那么COM(6+5,3)它就会换成这样: 6+5*3这样显然就...原创 2018-09-28 15:39:08 · 4714 阅读 · 0 评论 -
动态输入二维数组
使用vector#include<iostream>#include<vector>using namespace std;int main(){ vector<int> a; vector<vector<int> > data; int n; while(cin>>n){ ...原创 2018-09-28 00:23:05 · 1730 阅读 · 0 评论 -
需要直接输入一串数,回车输入结束,把数动态放进数组里
采用vector动态存储#include<iostream>#include<vector>using namespace std;int main(){ vector<int> data; int n,cnt = 0; while(cin>>n){ data.push_back(n); ...原创 2018-09-27 15:48:36 · 1954 阅读 · 0 评论 -
char 与 unsign char的转换
char为字符类型。unsigned char为无符号字符类型。二者均是占一个字节,可以直接通过强制转换的方式,把char类型的值转为unsigned char。当定义变量:unsigned char a;char b;转换的形式为:a = (unsigned char)b;当char类型的值为正时,转换后的值为原值。当char类型为负时,原始值的符号位会转为数据位,即结果值为原始值补...原创 2018-09-27 10:38:34 · 13230 阅读 · 0 评论 -
C++的字符串长度
1.对于#include<string>string a = "123";cout<<a.length()输出:3对于上面的a,如果cout<<sizeof(a)输出:8string占8个字节。2.对于#include<cstring>char a[10] = "123";char* b= "123原创 2018-09-27 10:37:08 · 2122 阅读 · 0 评论 -
C++ 类的前向声明、不完全类型类
简介在一个给定的源文件中,一个类只能被定义一次,如果在多个文件中定义一个类,那么每个文件中的定义必须是完全相同的将类定义放在头文件中,可以保证在每个使用类的文件中以同样的方式定义类。使用头文件保护符,来保证即使头文件在同一个文件中被包含多次,类定义也只出现一次。只声明却没有定义的类称为—————–不完全类型,不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明...原创 2019-07-23 14:31:34 · 1041 阅读 · 0 评论 -
dynamic_cast介绍
首先说到c++常用的四中转换类型,我们都很清楚,分别是下面四中 1 const_cast const_cast<目标类型>(标识符):目标类型只能是指针或者引用2 static_cast 类似C风格的强制转换,进行无条件转换,静态类型转换: 1)基类和子类之间的转换:其中子类指针转换为父类指针是安全的,但父类指针转换为子类指针是不安全的(基类和子类之间的动态类型转换建议用dynamic_cast)。 2)基本数据类型转换,enum,struct,int,cha...原创 2020-11-11 16:22:30 · 4444 阅读 · 0 评论 -
杂项:代码编写小技巧一
1.有一个函数Func()内有使用到vector,且会进行push_back。当这个函数会频繁调用到,比如每帧会刷新,这时候我如果我们能过明确的知道这个容器的大小,哪怕这个容器的大小需要计算,我们可以先计算出这个容器的大小,然后定义容器时先使用reserve初始化capacity大小,优化vector扩容时的损耗。2.有一个数double a, 一个bool flag;当flag为true是a不变, 当flag为false时, a为0,这时候可以写成a *= flag,而不是 a = flag ? a原创 2020-12-25 14:56:47 · 175 阅读 · 0 评论 -
C++ typename的起源与用法
起因近日,看到这样一行代码:typedef typename __type_traits<T>::has_trivial_destructor trivial_destructor;虽说已经有多年C++经验,但上面这短短一行代码却看得我头皮发麻。看起来它应该是定义一个类型别名,但是typedef不应该是像这样使用么,typedef+原类型名+新类型名:typedef char* PCHAR;可为何此处多了一个typename?另外__type_traits又是什...原创 2021-02-23 14:13:09 · 270 阅读 · 0 评论