对于学习c++中出现的小问题做一些汇总记录,以便忘记,方便回顾查询:
1、error C2360: “pDL_LineData”的初始化操作由“case”标签跳过问题:
switch(type)
{
case 0:
int i = 0;
i++;
break;
case 1:
int j = 0;
j++;
break;
}
对于这种写法会报c2360错误,网上查到的原因是:这个case语句可能没有被执行到(执行其他case了)导致变量没有初始化而导致接下来的错误,所以需要把变量放到switch前面声明初始化。
解决办法:
1)将case内的代码使用{}括起来:
switch(type)
{
case 0:
{
int i = 0;
i++;
}
break;
case 1:
{
int j = 0;
j++;
}
break;
}
注:break可以在{}内外都可
2)将int i,和int j的定义提到switch()前边:
3)还一种观点是,定义是可以,但是是不能初始化,或准确点说是定义的同时不能初始化,case中的定义和初始化分开即可,如int i; i=0;以测试也是可以解决;
总结:上边三种方法都能解决,但具体什么还没有弄明白,有待确定,对于上边三种解决方法不知道会带来什么其他问题,未知。但是编译,运行正常。或许多虑!
2、对于new和delete功能:
1)new和delete是c++关键字
2)new在c++中用来内存分配,运行期内分配的位置在堆空间,鼓励new分配的空间delete释放,对于小程序可以不释放,由进程或程序结束时操作系统自动回收,但是并非是个好习惯,尽量做到二者成对出现使用,否则可能造成内存泄漏,有程序崩溃的潜在危险;
3)delete释放指针指向的内存,并非指针本事占有的内存,而delete后该指针还是指向原来被释放的内存区域,如果再次delete,由于已经释放,就会发生空间访问异常问题,所以最好养成delete后指针赋值为NULL的习惯。对这种情况,C++标准规定:delete空指针是合法的,没有副作用。
3、std::fixed
在文件流输出到text文件时,double类型会转变为字符型,当为非常小的小数时,往往会输出为科学计数方法的数据,有时是不希望的,通过std::fixed可以固定为非科学计数方法,同时可以通过file.precision()设置小数精度。
double num = 0.0000000000001;
file.precision(6);
file<<std::fixed<<num;
4、atan2(y,x)
反正切,参数顺序和习惯不太一样,返回值为弧度,范围为【-pi,+pi】。