空指针详解
空指针背景与动机 在 C++ 中,我们常听到空指针(null pointer),但在真实代码中,对于空指针的表示,竟有 NULL、0 和 nullptr 三种之多。就如同茴香的“茴”的几种写法一样。初学者不禁要问:那到底哪一个才是正确优雅的推荐写法呢 ? 空指针(null pointer):表示不指向任何有效的内存地址。在早期 C 语言中,宏 NULL 通常被定义为 0(或在某些实现中 (void
关于「C++」的技术文章、设计资料与工程师讨论,持续更新。
空指针背景与动机 在 C++ 中,我们常听到空指针(null pointer),但在真实代码中,对于空指针的表示,竟有 NULL、0 和 nullptr 三种之多。就如同茴香的“茴”的几种写法一样。初学者不禁要问:那到底哪一个才是正确优雅的推荐写法呢 ? 空指针(null pointer):表示不指向任何有效的内存地址。在早期 C 语言中,宏 NULL 通常被定义为 0(或在某些实现中 (void
在C++中,++i(前缀递增)和 i++(后缀递增)的主要区别在于返回值和性能。 返回值不同 ++i:先递增,后返回值(返回递增后的值) i++:先返回值,后递增(返回递增前的值) int i = 5; int a = ++i; // i先变成6,然后a被赋值为6 int b = i++; // b被赋值为6,然后i变成7 性能差异 对于内置类型(int, float等) 性能相同,编译器会优
一、客户端大概是在做什么?以及应用场景 客户端,简单来说,就是为用户提供本地服务的程序,通常和服务器配合运行。在C/S模式下,客户端负责与服务器进行交互,接收和展示数据。比如,我们在访问一个网站时,输入的域名会先进行DNS解析,找到对应的IP地址,然后与服务器通信,获取所需资源。 Web客户端就是我们熟悉的浏览器。浏览器通过各种组件,如渲染引擎、JavaScript解释器等,将网页展示给我们。而在
本文为中老年C++客户端程序员的“正名帖”。 就非要做后端吗? 兄弟们是不是经常看到“客三消”、“客户端天花板低”这种论调。是不是感觉身边的同学、网上的帖子,个个都在冲后端、冲算法,好像不做后端就低人一等,职业生涯一眼望到头? 咱们来理性盘一盘是不是这样。 1. 先戳破那个最大的泡沫:“后端就高大上,客户端就Low?” 纯属扯淡。 这绝对是个天大的误解。后端开发很多时候是在处理业务逻辑、CRUD
在 C++ 编程中,(动态)内存管理是十分重要的。常见的(动态)内存问题包括: 内存泄漏(memory leak) 悬空指针 (dangling pointer) 双重释放或内存破坏(double free or corruption) 野指针(wild pointer) 内存越界(buffer overflow/underflow) 使用未初始化内存(uninitialized memory)
你是一名C++大牛,正在开发公司的核心业务系统,这个系统里有一套统一的日志接口: class ILogger { public: virtual void log(const std::string& message) = 0; virtual void error(const std::string& message) = 0; }; 所有模块都依赖这个接口,文件
bits/stdc++.h 是一个在 C++ 编程中常用的头文件,主要用于简化代码的编写。它包含了几乎所有的标准库头文件,方便程序员在编写代码时不必逐一包含每个头文件。 该头文件的所在源码仓库 https://gist.github.com/Einstrasse/ac0fe7d7450621a39364ed3b05cacd11 用法 在 C++ 程序中,使用 bits/stdc++.h 的方式非常
点击上方蓝字【囧囧妹】一起学习,一起成长! 引言 最近在用c++搞项目,因为多线程要做一个类似cnt的保护,今天学习了c++的原子操作。 探索c++的原子类型 std::atomic 类型是 C++ 提供的一种机制,用于实现多线程之间的安全共享数据。它通过原子操作来确保对共享变量的操作是不可分割的。在多线程环境下,如果没有适当的同步机制,对共享变量的读写可能会导致竞争条件,进而引发不确定的行为。s
你是一名1980年代初的C语言程序员,正在开发图形界面库,今天你需要处理圆形、矩形、三角形,每种图形都要实现两个操作:绘制和计算面积。 你喝了口咖啡,开始敲代码。 你的第一版代码是这样的: void draw_circle(Circle* c) { ... } void draw_rectangle(Rectangle* r) { ... } // 使用时需要判断类型 vo
训练营最近又上线了一个新项目: C++ MCP 服务器实现。 这个项目是对跨平台 AI 工具调用的全新解决方案。无论是文件操作、数据库查询,还是 API 调用,借助 MCP 协议,AI 与外部工具的连接都会变得前所未有的简单。通过统一的标准协议,AI 只需要一次实现,即可支持多个平台,彻底告别碎片化的生态! 下面来看看关于这个项目的详细介绍吧~ 为什么需要 MCP? 下面看一个真实场景 当你问 A
点击上方蓝字【囧囧妹】一起学习,一起成长! 引言 最近因为项目要求用c++,之前一直很讨厌c++,没办法只能短时间弥补c++的知识,项目中需要定义一个函数指针类型的vector,本以为很简单的问题,结果调试了一天,才发现错在哪里。 多余的std::function 先上代码吧,这里有一个测试代码,为什么要有测试代码?是因为下面的方式我在最开始验证该种实现时打印的地址是对的,但是之后一段时间就不对了
点击上方蓝字【囧囧妹】一起学习,一起成长! 引言 最近因为项目要求用c++,之前一直很讨厌c++,没办法只能短时间弥补c++的知识,项目中需要一个接口只调用一次,需要使用到c++的call_once机制,于是写一个小demo来测试,就因为这个足够小发现了一个非常有意思的问题。 call_once,基本原理 std::call_once 的内部实现基于两个重要的组件:std::once_flag 和
"线上服务崩了!但日志里什么都没有,程序还没进main函数就挂了!"运维工程师的声音里带着慌张。 这个数据库服务已经稳定运行了三个月,为什么发布新版本突然崩溃?更诡异的是,今天的发布只是加了一个无关紧要的日志模块。 你开始复盘代码,日志模块很简单,就是一个全局的Logger对象: // logger.cpp class Logger { public: void log(const std
C++ invoke invoke是C++17标准引入的一个函数模板,用来调用可调用对象(Callable Object,如函数指针、函数对象、成员函数指针等)并返回结果。 invoke提供了统一的调用语法,无论可调用对象的类型是什么,都可以使用同一种方式进行调用。 在C++17之前,调用不同类型的可调用对象需要使用不同的语法,比如直接调用函数、使用类对象的运算符重载操作符()来调用函数对象、使用
点击上方蓝字【囧囧妹】一起学习,一起成长! 引言 最近因为项目要求用c++,之前一直很讨厌c++,没办法只能短时间弥补c++的知识,项目中要设计一个线程池,需要取线程池任务的执行结果,这里涉及到c++的future关键字,在这里做个总结。 在C++的世界里,std::future是一种非常重要的工具,它让我们能够以异步的方式执行代码,并在需要的时候获取结果。随着C++11标准的引入,std::fu
你是一名C++程序员,负责开发公司的核心的股票交易系统,老板见到你都得喊一声哥,系统的核心是一个Stock类,存储股票的实时价格: class Stock { private: std::string symbol_; double price_; public: void setPrice(double price) { price_ = price; } dou
上篇文章,介绍了《大话设计模式》的第9章——原型模式。 关注“码农爱学习”,设置“星标公众号” 本篇,来介绍《大话设计模式》的第10章——模板方法。并通过C++代码实现实例代码的功能。 1 模板方法 模板方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 2