C/C++实战常见错误总结及注意事项【关注与Python的不同点】
2014-06-22 13:37
1221 查看
学习笔记,总结C/C++中与Python不一样的地方,需要注意。
1、变量只能定义一次,同级作用域(不包括其子作用域)再次定义报错;在子作用域可以重新定义,不会报错,会重写,而在子作用域外面,原来的定义不会改变。
2、牢记C++中数组下标越界不会报错。
3、二维数组定义中:a[3][4]注意每一行赋值留1个位置给"\n"字符。
4、牢记字符串定义只能用"",''定义字符,在eclipse中不会报错,自动赋最后一个字符给变量。
5、使用const定义常量,不可在同级作用域(不包括其子作用域)更改!在子作用域不可更改,但可以在子定义域再次定义!
6、const定义的常量默认为局部常量,也就是不能在其他文件使用,但可以用extern const int a = 1;来定义为全局常量。引用方法:先申明:extern const int a;再使用。
7、非const的变量默认为extern!要使 const 常量能够在其他的文件中访问,必须地指定它为 extern。
8、&在变量名前面,表示引用(references)。int ival = 1024; int &refVal = ival;只是起了一个别名!所以引用refVal的运算会导致iVal值发生改变(与Python类似)。需要注意的是常量const不能直接使用&符号起别名(引用),需要申明为const,即:const
int ival = 1024;const int &refVal = ival;才对!【目的是保证const型数据不可更改性!】
9、非 const 引用只能绑定到与该引用同类型的对象。【目的是保证引用和原始变量指向内容的一致性!】 const 引用则可以绑定到不同但相关的类型的对象或绑定到右值。【原因是const是不可变的,我们用的肯定是他的不可变性!这也说明了8中的合理性!】
10、typedef 可以用来定义类型的同义词;枚举的定义包括关键字 enum,其后是一个可选的枚举类型名,和一个用花括号括起来、用逗号分开的枚举成员列表。枚举成员是常量。
11、关于begin()、end()、rbegin()、rend()的常见理解错误【更新于:2014.06.30】
代码和输出:
实际使用,最后不要这样处理首尾元素的值,可以使用vec.front()和vec.back()方法!
12、关于++前置后置的问题。【更新于:14.07.02】问题来源于论坛问答
while((*a++=*b++)!='\0')
表示1、*a=*b; 2、a++;b++; 判断*b(此时b已经加了一次了,指向下一个元素)所指向元素是否为'\0',是的话就退出循环,不是(!=)则继续复制b所指数组中元素到a数组中。
(a++)=(b++))!=4 【错误】
a++返回的是自身的值副本
(++a)=(++b)!=4; 【正确】
++a 返回的是a加1后自身的引用!
13、
未完待续。。。
本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创。不定期更新,有错误请指正。
如果你看到这篇博文时发现不完整,那是我为防止爬虫先发布一半的原因,请看原作者Blog。
如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址。
1、变量只能定义一次,同级作用域(不包括其子作用域)再次定义报错;在子作用域可以重新定义,不会报错,会重写,而在子作用域外面,原来的定义不会改变。
2、牢记C++中数组下标越界不会报错。
3、二维数组定义中:a[3][4]注意每一行赋值留1个位置给"\n"字符。
4、牢记字符串定义只能用"",''定义字符,在eclipse中不会报错,自动赋最后一个字符给变量。
5、使用const定义常量,不可在同级作用域(不包括其子作用域)更改!在子作用域不可更改,但可以在子定义域再次定义!
6、const定义的常量默认为局部常量,也就是不能在其他文件使用,但可以用extern const int a = 1;来定义为全局常量。引用方法:先申明:extern const int a;再使用。
7、非const的变量默认为extern!要使 const 常量能够在其他的文件中访问,必须地指定它为 extern。
8、&在变量名前面,表示引用(references)。int ival = 1024; int &refVal = ival;只是起了一个别名!所以引用refVal的运算会导致iVal值发生改变(与Python类似)。需要注意的是常量const不能直接使用&符号起别名(引用),需要申明为const,即:const
int ival = 1024;const int &refVal = ival;才对!【目的是保证const型数据不可更改性!】
9、非 const 引用只能绑定到与该引用同类型的对象。【目的是保证引用和原始变量指向内容的一致性!】 const 引用则可以绑定到不同但相关的类型的对象或绑定到右值。【原因是const是不可变的,我们用的肯定是他的不可变性!这也说明了8中的合理性!】
10、typedef 可以用来定义类型的同义词;枚举的定义包括关键字 enum,其后是一个可选的枚举类型名,和一个用花括号括起来、用逗号分开的枚举成员列表。枚举成员是常量。
11、关于begin()、end()、rbegin()、rend()的常见理解错误【更新于:2014.06.30】
代码和输出:
vector<int> vec = {0, 1, 2, 3, 4, 5}; cout << *vec.cbegin() << " " << *(vec.cend()-1) << ",溢出了:" << *vec.cend() << endl; cout << *vec.crbegin() << " " << *(vec.crend()-1) << ",溢出了:" << *vec.cend() << endl; 0 5,溢出了:51473 5 0,溢出了:51473图解为:【这是C++ Primer上的图,可不是我胡扯,而且代码输出结果佐证】
实际使用,最后不要这样处理首尾元素的值,可以使用vec.front()和vec.back()方法!
12、关于++前置后置的问题。【更新于:14.07.02】问题来源于论坛问答
while((*a++=*b++)!='\0')
表示1、*a=*b; 2、a++;b++; 判断*b(此时b已经加了一次了,指向下一个元素)所指向元素是否为'\0',是的话就退出循环,不是(!=)则继续复制b所指数组中元素到a数组中。
(a++)=(b++))!=4 【错误】
a++返回的是自身的值副本
(++a)=(++b)!=4; 【正确】
++a 返回的是a加1后自身的引用!
13、
未完待续。。。
本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创。不定期更新,有错误请指正。
如果你看到这篇博文时发现不完整,那是我为防止爬虫先发布一半的原因,请看原作者Blog。
如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址。
相关文章推荐
- C++ 与“类”有关的注意事项总结(一)
- C++学习总结_指针常见错误
- 包含别人的dll,然后我们用类库再次封装成dll的时候的注意事项;源文件与模块生成时的文件不同;创建调试信息文件 ··PDB时发生意外的错误,进程无法访问文件,因为另一个程序正在使用此文件
- 给大家总结一个海淘Thinkpad的流程、注意事项和常见问题
- C\C++常见误解和错误、注意问题
- C++ 与“类”有关的注意事项总结(二):volatile 和 mutable
- Android NDK C++开发注意事项总结
- win7 + fedora17 双系统 安装详解+常见错误+注意事项 推荐
- C++常见编译错误分析总结
- WPF代码注意事项,开发常见问题,知识总结
- C++ 与“类”有关的注意事项总结(四):静态类成员 和 静态成员函数
- C++ 与“类”有关的注意事项总结(十一): 成员初始化列表(★)
- C++ 与“类”有关的注意事项总结(七):构造函数
- Android NDK C++开发注意事项总结
- 新手asp编程的基本法则与常见错误注意事项
- C++ 与“类”有关的注意事项总结(五):指向类成员的指针
- C++ 与“类”有关的注意事项总结(九):确定基类有虚析构函数
- C++ 与“类”有关的注意事项总结(十):类对象数组初始化(三种方法)
- 基于C++中常见编译错误的总结详解
- C\C++常见误解和错误、注意问题