C++ ——— 基础语法学习3 (c++基础收尾)

本文介绍了C++中内联函数可能导致链接错误的原因,强调了内联函数的使用场景及其在不同编译模式下的表现。接着讨论了`auto`关键字的用途和限制,指出其不能用于函数参数和返回值,以及不能声明数组。此外,还讲解了基于范围的for循环的使用规则,并提到了C++中的`nullptr`作为更安全的空指针替代`NULL`和`0`。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为什么内敛函数可能导致链接错误?我们知道编译器对内敛函数是一种建议编译器会自动优化,判断当前内敛函数需不需要宏展开还是建立函数栈帧,内联函数更加适合调用次数多但是函数代码段短小的情况,一般在relase版本下才会对其经行内联,在debug版本下在vs2019上需要手动调节:

 

将这俩个开启打开反汇编就能够看到内敛函数的底层实现了 。

设置后: 

 

 所以内联函数如果声明定义分离为什么可能导致链接错误呢?原因如下:声明的头文件会在所有源文件中展开这样就没有对应的地址了,而在main函数中又调用该函数没有有效的地址合并符号表的时候就会出现链接错误。

2 .auto 关键字,auto关键字是自动推导变量的类型所以在定义的时候必须给它初始值,因为这样的特性他也不能做函数的参数和返回值,不能做返回值的原因是不利于查阅这个函数,使用者不能很好的了解这个函数,同时auto关键字也不能声明数组,

int main()
{
     auto x=1;
     int c =1;
     auto * y =&c;//这样对y经行定义就右边就必须是地址;y的实际类型是指针    
   //进行取别名
auto &  i = c; 
     return 0;
}

不能一行定义不同类型的变量

auto x  =1,y=1.0;

3.基于范围的for循环,给定数组名自动推导范围,但必须是数组名不能是首元素地址

否则:

 

 4.C++的NULL,c++中采用这类空指针:nullptr;这样更加不容易出错,在C++里面NULL和0 是等价的为什么呢,c++里面的NULL是宏

#ifndef NULL

#ifdef __cplusplus
#define NULL 0
#else if
#define NULL (void * ) 0
#endif

#endif 

当你传入NULL和0时会调用同一个函数

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值