漏学的C++知识
来源:互联网 发布:电火花线切割编程 编辑:程序博客网 时间:2024/05/21 07:08
1、为什么istream类型的对象(例如std::cin对象)可以用作循环测试条件?
#include <iostream>int main() { int sum = 0, value; while (std::cin >> value) sum += value; std::cout << "Sum is " << sum << std:endl; return 0;}这里涉及2个知识点:
(1)输入操作符 >> 返回的是它的左操作数,std:: cin >> value 返回了 std::cin 对象自己。
(2)问题成了 while (std::cin) ,std::cin是istream类型,当它用作测试条件时,返回流的状态。流是有效的,则测试成功,否则失败。
当遇到EOF,或无效输入(例如类型不匹配)时,流的状态变为无效。
2、在C++中,std::endl 有刷新输出缓冲区的作用。没必要调用 cout.flush();
3、程序员常常利用 edit-compile-debug 循环,利用编译器的错误检测功能排查程序的错误。
4、将unsigned int类型赋值给 unsigned char会发生什么?
unsigned char 类型的取值范围是 0 ~ 255 (共256个值)。而unsigned int 比 unsigned char表示的范围更大,例如可以表示 336.
unsigned char a;unsigned int b = 336;a = b;std::cout << "a = " << a << std::endl;
结果输出是多少? 答案是 a = 80。 程序执行的过程是:编译器对超出范围的值执行了模运算,unsigned char类型可以表示256个数,因此 336 % 256 = 80。
其他不同长度的unsigned类型的赋值操作都是模运算法则。
当把负数赋值给一个unsigned类型的时候(在C++中这是合法操作),也是上面描述的模运算法则。
但是,对于signed类型的算数类型,不同的编译器有不同的处理方式。一般情况,处理方式类似于unsigned。
5、少用float,多用double。
6、变量定义跟变量声明有什么区别?
区别变量的定义与声明非常重要,由extern关键字和变量是否初始化共同决定的。变量定义要分配存储空间。变量声明不分配存储空间,它引用一个已经定义的变量(可能在另一个文件中)。假如以下变量都是全局变量,规则如下:
1、没有extern。例如,“int var;” 和 “int var = 100”, 这是变量定义。
2、有extern, 没有初始化。“extern int var;”, 这是变量声明。
3、有extern,也有初始化。 “extern int var = 12”, 这又变成了变量定义。
对于const变量而言,规则如下:
1、所有const变量的定义必须初始化(用extern关键字将它变成声明,怎么变见后面规则)。
2、const变量只能在同一个文件中使用(类似于C语言中的static变量)
const int a; //错误:没有初始化const int b = 100; //正确,这是变量定义,成为局部变量extern const int aa; //正确,这是变量声明extern const int bb = 100; // 正确,这是变量定义,可以在其他文件中使用。
7、magic number(魔数)的含义: 程序中出现了一个数值,无法知道它的含义,就好像这个数字是魔术变出来的一样。
写程序要尽量避免制造魔数。
8、enum类型中的成员可以用相同的数值吗?
可以。例如:
enum fruit {apple = 1, orange, banana = 1, watermelon};enum类型不是int类型,所以不能用 int 类型初始化 enum。
enum Points { point2d = 2, point2w, pint3d = 3, point3w };Points a = point3d; //正确Points b = 2; //错误,不能用int初始化enum类型b = 2; //错误,也不能用int给enum赋值Points c;c = a; //正确c = point3w; //正确9、struct与class关键字的区别
区别:1)struct内默认的访问标号是public,class内默认的访问标号是private
2)用struct关键字声明的结构体中,内存布局与C语言兼容。用class声明做不到
10、不用中间变量交换两个变量
a = a + b; b = a - b; a = a - b;
或:
a = a ^ b; b = a ^ b; a = a ^ b;
11、特殊用法
int i = i; 等价于 int i;
float a = 1.0f; cout << (int&)a << endl; //直接把a当作int输出,无转换类型
在C++中,无论是赋值、传参数、返回数值,只要有任何类型不匹配的情况,发生的事情都是:1、先转换成同一个类型 2、再传递或使用
float b = 10f; int a = b;
面试中C/C++考试经常考察的知识点:赋值语句、sizeof、类型转换、const
- 漏学的C++知识
- 要学的知识
- 学一点破解的知识
- 以后再学的知识:
- Linux系统下的C语言开发都需要学些的知识
- 今天学了一个重要的C语言知识!可以用在C++上,相当重要!!!!!
- 学c的体会
- 学C的忠告
- 学c语言的
- 学C的好书
- 学java应该掌握的知识
- DELPHI界面必学的知识
- 学过的知识该多复习
- 每天学一个小时的电力行业知识
- 大学应该学的软件知识
- 让天下没有难学的知识
- 列列自己要学的知识
- DELPHI窗口界面必学的知识
- poj 3308 Paratroopers
- Android系列教程之九:GridView组件的使用
- 牛顿迭代法
- UIView动画效果
- SAX 读取xml时character()的问题
- 漏学的C++知识
- Android系列教程之十:Intents and Intent Filters(一)
- YUV420P转换为RGB32格式
- Android系列教程之十一:Intents and Intent Filters(二)
- BMP文件详解
- IOS学习笔记29—提示框第三方库之MBProgressHUD
- 尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能
- Android系列教程之十二:Intents and Intent Filters(三)
- 特殊符号