C++ 基础复习

基础复习

1.const引用为什么能引用临时对象

临时对象(Temporary Object)是在表达式求值过程中隐式创建的对象,例如:

函数返回非引用类型的值

类型转换(如double d = 10 + 5.5;中的中间结果)

初始化const引用或右值引用

const引用将临时对象的生命周期延长至引用的生命周期结束

2.内联函数的额外作用

类内成员函数默认内联的特殊性​

类内直接定义的成员函数(隐式内联)​除了核心优化作用,还因以下必要性:

​​(1) 解决头文件包含的重复定义问题​

​背景​:类定义通常放在头文件中,若成员函数在类内实现且未内联,多个源文件包含该头文件时,会导致函数重复定义(违反ODR规则)。

​隐式内联的作用​:通过内联声明,允许多个编译单元包含同一函数定义,避免链接错误。

3. nullptr

NULL实际是⼀个宏,在传统的C头⽂件(stddef.h)中,可以看到如下代码:

#ifndef NULL

#ifdef __cplusplus

#define NULL 0

#else

#define NULL ((void *)0)

#endif

#endif

• C++中NULL可能被定义为字⾯常量0,或者C中被定义为⽆类型指针(void*)的常量。不论采取何种定义,在使⽤空值的指针时,都不可避免的会遇到⼀些⿇烦,(由于C++存在函数重载)本想通过f(NULL)调⽤指针版本的f(int*)函数,但是由于NULL被定义成0,调⽤了f(int x),因此与程序的初衷相悖。f((void*)NULL)只能调用f(void*);

• C++11中引⼊nullptr,nullptr是⼀个特殊的关键字,nullptr是⼀种特殊类型的字⾯量,它可以转换

成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被

隐式地转换为指针类型,⽽不能被转换为整数类型。

cpp 复制代码
void f(int x)
{
	cout << "f(int x)" << endl;
	return;
}
void f(int*x)
{
	cout << "f(int*x)" << endl;
	return;
}
int main()
{
	f(0);
	f(NULL);
	f(nullptr);
	return 0;
}
相关推荐
1104.北光c°30 分钟前
滑动窗口HotKey探测机制:让你的缓存TTL更智能
java·开发语言·笔记·程序人生·算法·滑动窗口·hotkey
for_ever_love__1 小时前
Objective-C学习 NSSet 和 NSMutableSet 功能详解
开发语言·学习·ios·objective-c
仰泳的熊猫4 小时前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
似水明俊德8 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
Thera7778 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
炘爚9 小时前
C语言(文件操作)
c语言·开发语言
阿蒙Amon9 小时前
C#常用类库-详解SerialPort
开发语言·c#
凸头9 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun31415910 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm
君义_noip10 小时前
信息学奥赛一本通 1952:【10NOIP普及组】三国游戏 | 洛谷 P1199 [NOIP 2010 普及组] 三国游戏
c++·信息学奥赛·csp-s