C++冷知识(1)
func()等价于func(void)
也就是说在C++中,参数列表为空意味着不接受任何参数。之所以要注意这一点是因为在C语言中,参数列表为空意味着参数不确定。两者的语义是有巨大差别的,作为学了C再学C++的人来说,是需要注意的一点。
void指针无法隐式转换为其它类型指针
需要通过static_cast<T*>
语法来显式转换,同样也是跟C中的语法不一致,C语言中是允许void
指针直接赋值给其它类型指针的。一个最好的体现两者区别的例子就是C和C++中对NULL
宏定义的不同:
#undef NULL #ifdef __cplusplus // C++ #define NULL 0 #else // C #define NULL ((void *)0) #endif
char不一定等于signed char
实际上,C++标准中没有规定char
类型的符号,依赖于具体的实现,这一点和其它的整型类型都不同。所以要使用char
类型来进行小整数运算的时候最好明确指定其符号。
const全局变量默认作用域为当前cpp文件
为了能在头文件中定义const
全局变量,C++规定const
全局变量默认具有内部链接属性,若要将其作用域扩大到全工程,那么需要在定义处手动加上extern
关键字:
// 这两行全局变量定义等价 const int MAX = 233; static cosnt int MAX = 233;
创建struct union enum对象时不必带上这几个关键字
在C语言中是需要带上相应的关键字的,在C++中这几种类型和class
类型一样,只需要写类型名即可:
struct Foo { int count; }; // ok Foo foo;
忽略参数的处理
有时候不需要处理函数调用传进来的一些参数,但如果放置没有用的参数不管可能会引起编译警告甚至错误,这个时候就需要手动指定忽略参数的处理:
// 方法一 void func(int n, int m) { // 忽略参数m (void)m; std::cout << n << std::endl; } // 方法二 void func(int n, int) { std::cout << n << std::endl; }
相关推荐
文山羊 2020-11-07
susmote 2020-11-07
拉斯厄尔高福 2020-11-04
xceman 2020-10-23
hellojunz 2020-10-23
caojhuangy 2020-10-12
xinyupan 2020-09-28
lousir 2020-09-27
一个逗逗 2020-09-22
Maryhuan 2020-09-20
rkhstar 2020-09-09
DreamSnow 2020-09-09
aehousmantao 2020-09-03
tkernel 2020-09-03
abfdada 2020-08-26
svap 2020-08-25
二十不悔三十而立 2020-08-19
FlightForever 2020-08-17
joyjoy0 2020-08-13