聊聊 C++ 中那些容易踩坑的运算符

news/2026/1/21 11:36:28/文章来源:https://www.cnblogs.com/alangrobo/p/19510731

C++ 里的 :: . < << this this-> 各自是什么、怎么用、底层原理

这几个关键符号到底干嘛的?

:: —— 作用域解析运算符(scope resolution)

作用:告诉编译器“我要用的是某个作用域里的名称”。
常见用法:

  1. 访问命名空间中的东西
#include <iostream>int main() {std::cout << "Hello";  // std:: 是作用域,cout 是名字
}
  • std 是命名空间

  • :: 表示“在 std 这个作用域里找到 cout”

  1. 访问类的静态成员 / 枚举 / 嵌套类型
点击查看代码
class Robot {
public:static int count;
};int Robot::count = 0;   // 在类外定义静态成员
3. 区分全局变量 vs 局部变量
点击查看代码
int value = 10;      // 全局int main() {int value = 5;   // 局部std::cout << value << std::endl;   // 5std::cout << ::value << std::endl; // 10,:: 表示“全局作用域”
}
:: 完全是 编译期 概念,用来在“符号表”中查找正确的名字,不涉及运行时。 ### . —— 成员访问运算符(通过对象) 作用:通过一个“对象本身”访问它的成员变量 / 成员函数。
点击查看代码
class Robot {
public:void move() {}int id;
};Robot r;
r.id = 1;      // 通过 . 访问成员变量
r.move();      // 通过 . 调用成员函数
前提:r 是一个 对象(非指针)。 ### ->(this->) -> 是 通过指针访问对象成员 的运算符,本质上是:
点击查看代码
ptr->member   等价于   (*ptr).member
example:
点击查看代码
Robot r;
Robot* p = &r;p->move();   // 通过指针调用
(*p).move(); // 等价写法

this 和 this->
在 C++ 的非静态成员函数内部,编译器会自动给你一个隐藏参数 this:

点击查看代码
class Robot {
public:int id;void setId(int id) {this->id = id;        // this 是 Robot* 类型// 等价于:this->id = id;// 再等价:(*this).id = id;}
};
  • this 是指向当前对象的指针

  • 所以要访问成员必须 this->member

  • 很像 Python 里面的 self,但 Python 要自己写,C++ 自动传入。

< —— 两种完全不同的语义

  1. 比较运算符:小于号
点击查看代码
if (a < b) { ... }
2. 模板参数的界定符(语法)
点击查看代码
#include <vector>std::vector<int> v;     // 模板类
Eigen::Matrix<double, 6, 1> vec;
  • std::vector:vector 是类模板, 是模板参数

<< —— 也有两种含义:位移 or 流输出

  1. 位运算:左移
点击查看代码
int x = 1;
int y = x << 3;   // 结果 8,相当于 1 * 2^3
2. 流插入运算符(利用运算符重载)
点击查看代码
#include <iostream>int main() {std::cout << "x = " << 10 << std::endl;
}

<< 被重载为“把东西写入流中”的操作:

  • 左边:std::ostream 对象(如 std::cout)
  • 右边:要输出的内容

this —— 当前对象的指针

example

点击查看代码
class Robot {
public:int id;void setId(int id) {this->id = id;}
};
编译器会把上述改写成类似:
点击查看代码
void Robot::setId(Robot* this, int id) {this->id = id;
}
所以:
  • this 是一个隐式形参

  • 类型是 Robot*

  • this->member 访问成员变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1194241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5 C++(42):创建 timeLine 时间轴

&#xff08;214&#xff09; &#xff08;215&#xff09; 谢谢

郑州top10研究生留学中介推荐,稳定可靠保障您的留学选择

郑州top10研究生留学中介推荐,稳定可靠保障您的留学选择一、郑州学子如何筛选可靠的研究生留学中介?在郑州市,每年都有大量本科毕业生计划赴海外深造。面对市面上众多的留学服务机构,许多同学与家长常常感到困惑。…

快速落地 JT/T 808 服务端:jt-framework

快速落地 JT/T 808 服务端:jt-framework 快速落地 JT/T 808 服务端:jt-framework 一、项目名称 jt-framework 一句话简介:基于 Spring Boot 的 JT/T 808(并扩展 JT/T 1078、附件服务器、Dashboard)服务端框架,提…

【高薪程序员必会知识点】:深拷贝 vs 浅拷贝——3个实战案例带你彻底掌握

第一章&#xff1a;深拷贝与浅拷贝的核心概念解析在编程中&#xff0c;对象和数据结构的复制操作看似简单&#xff0c;实则暗藏玄机。当一个变量引用复杂数据类型&#xff08;如对象、数组&#xff09;时&#xff0c;直接赋值往往不会创建新的独立副本&#xff0c;而是产生指向…

Python批量处理Word文档:告别重复劳动的3个核心技巧

第一章&#xff1a;Python自动化办公与Word处理概述在现代办公环境中&#xff0c;文档处理占据了大量重复性工作时间。利用Python进行自动化办公&#xff0c;尤其是对Microsoft Word文档的批量生成、修改与格式化操作&#xff0c;已成为提升效率的重要手段。通过python-docx等第…

2026年广州诚信的汽配加盟商城,汽车配件加盟,连锁汽配加盟厂家综合实力参考

引言在 2026 年的广州,汽配加盟行业呈现出蓬勃发展的态势。为了给广大投资者提供客观、公正、真实的汽配加盟参考,我们依据相关权威数据和科学的测评方法,对众多汽配加盟商城、汽车配件加盟品牌以及连锁汽配加盟厂家…

20260121人工智能作业v2

文章目录一、核心命令清单&#xff08;逐条执行&#xff0c;需root权限&#xff09;1. 校验并创建用户组 dev_team2. 创建用户 alice&#xff08;指定主组安全配置&#xff09;3. 创建用户 bob&#xff08;同alice&#xff0c;仅用户名不同&#xff09;4. 创建 /opt/project 目…

2025年国内靠谱的假肢公司推荐与深度解析

面对肢体差异,选择一家专业、可靠且充满人文关怀的假肢公司,是开启新生活的关键一步。市场上服务机构众多,但技术水平、服务质量、后续支持参差不齐,用户常面临“价格不透明”、“装配后不适”、“售后服务缺失”等…

专利--授权及花费(发明)

发明专利授权相关费用需分授权登记阶段和授权后年费阶段&#xff0c;以下是 2026 年官方最新标准&#xff08;人民币&#xff0c;无费减&#xff09;&#xff1a; 一、授权登记阶段费用&#xff08;一次性缴纳&#xff09;二、授权后年费&#xff08;每年缴纳&#xff09;三、费…

Python模块导入失败怎么办?(ModuleNotFoundError深度解析与实战修复)

第一章&#xff1a;Python模块导入失败怎么办&#xff1f;&#xff08;ModuleNotFoundError深度解析与实战修复&#xff09;当Python程序运行时提示 ModuleNotFoundError: No module named xxx&#xff0c;说明解释器无法定位指定模块。该错误通常由路径配置不当、虚拟环境错乱…

连接PostgreSQL总是失败?,一文搞定Python与PostgreSQL无缝集成

第一章&#xff1a;连接PostgreSQL总是失败&#xff1f;常见问题与核心原理在开发和运维过程中&#xff0c;连接 PostgreSQL 数据库失败是常见问题。理解其底层通信机制与配置逻辑&#xff0c;有助于快速定位并解决问题。网络与监听配置 PostgreSQL 默认仅监听本地回环地址&…

【Python报错终极指南】:3步快速解决ModuleNotFoundError难题

第一章&#xff1a;Python报错终极指南的核心价值Python作为一门广泛应用于数据科学、Web开发和自动化脚本的语言&#xff0c;其简洁语法背后隐藏着初学者和资深开发者都可能遭遇的复杂错误。掌握Python报错机制的本质&#xff0c;不仅能快速定位问题&#xff0c;还能提升代码健…

揭秘Python操作PostgreSQL数据库:5个步骤快速上手并避免常见陷阱

第一章&#xff1a;Python连接PostgreSQL数据库概述在现代Web开发和数据处理中&#xff0c;Python因其简洁的语法和强大的生态被广泛用于与关系型数据库交互。PostgreSQL作为功能丰富、可靠性高的开源对象-关系型数据库系统&#xff0c;常与Python配合使用&#xff0c;实现高效…

如何用Python将字符串秒变datetime对象?这4个方法最有效

第一章&#xff1a;字符串转datetime对象的核心意义在现代软件开发中&#xff0c;时间数据的处理无处不在。日志分析、用户行为追踪、任务调度等场景均依赖精确的时间解析。然而&#xff0c;原始时间通常以字符串形式存储或传输&#xff0c;如 "2023-10-05 14:30:00"…

还在用random.randint?这7种高级随机数生成方法你必须掌握,告别初级写法

第一章&#xff1a;Python随机数生成的演进与核心概念Python 的随机数生成功能自诞生以来经历了显著演进&#xff0c;从早期基于简单算法的实现发展为如今支持多种分布和加密安全的成熟体系。其核心依赖于伪随机数生成器&#xff08;PRNG&#xff09;&#xff0c;默认使用梅森旋…

中电金信:源启行业AI开发与服务平台荣获“大湾区珠港澳IT产品创新奖”

近日,珠海市计算机学会联合香港新兴科技教育协会、澳门电脑学会共同发布“2025年度大湾区珠港澳IT产品(项目)创新奖”。中电金信“源启行业AI开发与服务平台”凭借领先的技术架构与显著的行业赋能价值,成功荣获该奖…

必读感悟:软件测试中的心理健康挑战

软件测试与心理健康的隐形纽带 在快速迭代的软件开发世界中&#xff0c;软件测试作为质量保障的核心环节&#xff0c;常常被喻为“系统的守门人”。然而&#xff0c;测试从业者面临的心理健康挑战却鲜少被关注。高强度的工作节奏、重复性任务的压力以及角色边缘化的现实&#…

OpenCV+Python摄像头开发,你不可错过的7个优化技巧

第一章&#xff1a;OpenCVPython摄像头开发概述OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个功能强大的开源计算机视觉库&#xff0c;支持多种编程语言&#xff0c;其中 Python 因其简洁的语法和丰富的生态成为开发者首选。结合 OpenCV 与 Python…

Python字典排序怎么按value排?这3种技巧你必须掌握

第一章&#xff1a;Python字典排序按value大小的核心概念在Python中&#xff0c;字典&#xff08;dict&#xff09;是一种无序的键值对集合。尽管从Python 3.7开始&#xff0c;字典保持了插入顺序&#xff0c;但其本身并不支持按值&#xff08;value&#xff09;自动排序。当需…

2026年远程测试工作的智能化重构与神经多样性适配

一、行业现状&#xff1a;远程测试的机遇与核心挑战 2026年全球远程办公市场规模突破8000亿美元&#xff0c;其中软件测试领域因技术适配性强&#xff0c;远程化渗透率达78%。核心机遇体现为三方面&#xff1a; 人才池全球化&#xff1a;企业可跨时区组建测试团队&#xff0c;…