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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)