浅析C/C++中的switch/case陷阱 先看下面一段代码: 文件main.cpp 在gcc编译器下编译的结果为: 提示跳过了变量b的初始化过程。对于一个局部变量,它的作用域为它所定义的地方到它所在的语句块结束为止,那么对于变量b,它所在的最小语句块 ...
目录 概述 C C 整数的阴暗角落 整型字面量 整型提升与寻常算术转换 算术溢出检测 位运算技巧 总结 参考 概述 无符号数和有符号数是通用的计算机概念,具体到编程语言上则各有各的不同,程序员是解决实际问题的,所以必须熟悉编程语言中的整数。C C 有自己特殊的算术运算规则,如整型提升和寻常算术转换,并且存在大量未定义行为,一不小心就会产生 bug,解决这些 bug 的最好方法就是熟悉整数性质以避 ...
2021-04-02 20:35 0 491 推荐指数:
浅析C/C++中的switch/case陷阱 先看下面一段代码: 文件main.cpp 在gcc编译器下编译的结果为: 提示跳过了变量b的初始化过程。对于一个局部变量,它的作用域为它所定义的地方到它所在的语句块结束为止,那么对于变量b,它所在的最小语句块 ...
C++开发的项目难免会用到STL的string,使用管理都比char数组(指针)方便的多,但在得心应手的使用过程中也要警惕几个小陷阱,避免我们项目出bug却迟迟找不到原因。 1. 结构体中的string赋值问题 直接通过一个例子说明,下面的例子会输出 ...
可能第一眼看上去没什么毛病,BUT getname()里面的get_name是一个字符串数组。在函数return之后这个get_name会释放内存(因为她在栈中,函数执行玩会弹栈)。所以main函数中的name变成了一个野指针,这是一个很危险的操作。 解决办法:返回一个在堆中 ...
今天使用动态数组,本来想通过sizeof 获取动态数据,结果出现了错误。 先对自己做个测试,能做出下面这个题目,并做出合理解释,可以不用往下看了。 View Co ...
逻辑左移=算数左移,右边统一添0 逻辑右移,左边统一添0 算数右移,左边添加的数和符号有关,左侧添加符号位。即正数添0,负数添1。 如果负数要进行逻辑右移,可将其转换为unsigned类型。 ...
我们知道,string类为我们提供了很多的便利,我们用string类能方便的做字符串的各种操作,避免了我们直接操作char指针而产生的一些繁琐的操作,和内存泄露的可能性,可是string类也是有陷阱的。下面我们看这样一个例子,你能看出问题所在吗? 如果看不出来可以实际运行一下,会发 ...
使用中间变量交换两个int型变量的值: 相信大家很容易写出来,但考虑到边界值情况时会有一些有趣的事情。 我们知道有一个int.MaxValue和int.MinValue表示in ...
C++/C程序通常分为两个文件。 //错误。没有强调翻译单元的概念。 另一个文件用于保存程序的实现(i ...