当前位置: 首页 > news >正文

C++笔记(基础)基于范围的for循环 nullptr,using关键字

基于范围的for循环

int arr[] = { 1,2,3,4,5 };

for (int num : arr) {

cout

}

使用值类型变量num遍历数组arr,num是数组元素的副本,对num修改不会影响arr本身;

for (int& num1 : arr) {

num1*=2//每个元素×2

}

因为num1是对数组元素的引用,同处一块地址,所以修改的是数组元素本身;

避免不必要的拷贝(const 引用)

若只需读取元素(不修改),且元素类型较大(如自定义类对象),建议用 const auto& 避免拷贝开销:

#includestruct LargeObject { /* 假设是一个大对象 */ };int main() {std::vector objects; // 存储大对象的容器// 用 const 引用读取,避免拷贝for (const auto& obj : objects) { // const 确保不修改,& 避免拷贝// 读取 obj 的内容...} return 0;}

适用范围

范围 for 循环可遍历以下类型的对象:

原生数组(如 int arr[5])。

实现了迭代器接口的 STL 容器(std::vector、std::list、std::map 等)。

自定义类型(需提供 begin() 和 end() 方法,返回迭代器)。

限制

不能直接获取当前元素的索引(若需索引,仍需用传统 for 循环)。

不能跳过元素或反向遍历(需用迭代器手动控制)。

遍历过程中若容器被修改(如插入 / 删除元素),可能导致未定义行为(类似迭代器失效问题)。

拷贝开销的根源

“值传递” vs “引用传递”

无论是传统 for 循环还是范围 for 循环,只要是通过 “值传递” 获取元素(即不使用 &),就会产生拷贝

nullptr(关键字)

与 NULL 的区别

在C++ 中, NULL 通常被定义为 0 或((void*)0)

当使用 NULL 时,可能会在某些情况下导致重载函数匹配错误,

因为 0 可能被解释为整数而不是指针。

而 nullptr 有明确的空指针类型,能避免这种二义性,使代码更清晰、安全。

nullptr也会进行隐式转换,它可以转换为任何指针类型,

但是会有优先级的存在,所以在有重载函数调用时,不会报错

兼容性:nullptr 可隐式转换为任何指针类型(包括类成员指针),但不能转换为整数类型:

int* p1 = nullptr; // 正确:nullptr → int*

char* p2 = nullptr; // 正确:nullptr → char*

int x = nullptr; // 错误:不能转换为 int

using

using跟typedef作用相同

using INT = int;等价于typedef int INT;

模板别名:

例如, template using Vec = std::vector;

定义了 Vec 作为 std::vector 的模板别名,使用时可以像 Vec v;

这样定义一个 int 类型的向量。

http://www.dtcms.com/a/407911.html

相关文章:

  • cpanel 子网站做旅游网站犯法吗
  • 浙江华企做的网站效果如何wordpress弹窗
  • 学做效果图的网站有哪些四川平昌县建设局网站
  • 在国外做黄皮网站违法么软盟软件 app开发公司
  • 建水网站建设网站常用的蓝色
  • 怎么查看网站有没有做301深广纵横设计公司官网
  • 做网站要不要35类商标网龙网络公司招聘
  • 【鸿蒙开源技术共建】用@luvi/lv-markdown-in在HarmonyOS上打造高性能Markdown编辑体验
  • 两学一做网站专栏怎么设置网站建设中期怎么入账
  • Java 中 NIO与传统IO的关系 (附Java IO 流核心类对比表)
  • 阿里巴巴怎么做企业网站南京江北新区楼盘
  • I/O 多路转接之 epoll:高并发服务器的性能利器
  • 呼叫行业群呼模式转手拨模式转型代价分析
  • 手机网站建站价格淘宝网站推广策划方案
  • linux 安装和使用CommonAPI
  • Linux指令和Windows的有啥不一样?咋用的?
  • 操作系统(二) :操作系统运行机制(中断和异常、系统调用)
  • 高精度组合惯导技术与IMU传感器价格及供应商分析
  • 网站文字优化方案网络规划与设计报告总结
  • C++ 拓扑排序
  • Ubuntu 24.04.3搭建redis哨兵模式
  • Swift 入门(一 - 基础语法)
  • GCMSCNN 模块:气相色谱 - 质谱数据的分子特征提取方案
  • 简单网页制作模板图片福州seo兼职
  • 新德通:深耕光通信领域,打造全场景网络连接解决方案
  • 汽车网站模板免费下载做网站的注意点
  • COMSOL建立Voronoi泰森多边形二维模型
  • springboot - 邮箱验证码登录
  • 百度收录什么网站京东网站建设的策划书
  • 进程的概念(上)