首页
学习
活动
专区
圈层
工具
发布

《Effective C++》读书笔记(1):让自己习惯C++

3、template C++,泛型编程,衍生出模板元编程(在各个新标准中逐步完善)。4、STL,包括容器、迭代器、算法与函数对象。...,另一方面预处理后已经消失,编译链接过程中没有其符号信息,出问题时无法定位到它。...最佳处理办法是:对于内置类型必须手动初始化,而对于用户定义的对象,在使用对象前将其初始化(责任落在构造函数上)。 构造函数包含成员初值列与函数体。...2、成员初始列的排列顺序应与在类中的声明次序一致,因为成员初始化顺序只与后者有关,前者若与后者不一致的话可能导致误解。...class FileSystem{...}; FileSystem& tfs(){ static FileSystem fs; return fs; } class Directory{...}

37530

《Effective C++》读书笔记(一):让自己习惯C++(条款01~04)

很多人在说起C++的时候,都只会说C++是建立在C基础上的一个面向对象的语言,而老师会加上一句:C++是一个面向过程同时,也面向对象的语言,因为它包容C。...②初始化列表的初始化顺序是按照成员变量在声明时的顺序来的,并非是在初始化列表中的顺序!...③跨编译单元的初始化次序问题: 在不同编译单元中定义的non-loacl static对象的初始化次序在C++中没有明确的定义。什么意思呢?...std::size_t numDisks() const; //... }; extern FileSystem tfs;//给用户使用的对象 在源码文件B中,调用源码文件A的对象: class...std::size_t numDisks() const; }; FileSystem& tfs() { static FileSystem fs;//在首次遇到fs的时候,对它进行初始化

38210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++ this指针:用于在成员函数中指向调用该函数的对象

    C++中this指针是一个指向当前对象的指针。在成员函数中,可以使用this指针来访问调用该函数的对象的成员变量和成员函数。...一、定义和使用this指针 this指针是在成员函数内部定义的一个常量指针。它存储了当前对象的地址,可以通过它访问当前对象的成员变量和成员函数。...在setName函数内部,this指针被用来访问成员变量name。...这种情况下,可以在函数内部访问其他对象的成员变量和成员函数。...四、总结 this指针在C++中是一个非常重要的概念,可以用来访问调用该函数的对象,作为返回值返回,或者作为函数参数传递。掌握this指针的使用可以帮助我们更好地编写面向对象的程序。

    2K40

    C++一分钟之-文件系统库(fs)的使用

    在C++17中引入的filesystem>标准库,极大地简化了文件和目录的操作。本文将深入浅出地介绍fs库的基本用法,常见问题及易错点,并通过代码示例帮助理解。...一、基本概念与初始化filesystem>库提供了处理文件和目录的工具,核心类是std::filesystem::path和std::filesystem::directory_iterator。..." filesystem>库在不同操作系统上表现可能有差异,如路径分隔符。...五、总结filesystem>库为C++带来了强大的文件系统操作能力,但使用时需注意错误处理、跨平台兼容性和性能考虑。...通过上述示例和注意事项,希望读者能够更熟练地应用filesystem>库进行文件和目录管理。以上就是关于C++ filesystem>库的基本介绍和使用要点,希望对大家有所帮助!

    70210

    C++最佳实践 | 5. 可移植性及多线程

    正确性和脚本 可移植性 明确使用的类型 大多数产生告警的可移植性问题都是因为我们没有注意类型。标准库和数组使用size_t作为索引,标准容器的大小使用size_t类型。...参考: http://www.viva64.com/en/a/0010/ 使用标准库 std::filesystem C++17新增了新的filesystem库,在所有支持的编译器上提供了可移植的文件系统访问能力...std::thread C++11的线程功能能够基于pthread或WinThreads使用。...即使现在的代码不是为了并行化而写,也没有理由在将来永远不做并行化。 静态(static)数据 除了作为全局数据之外,静态数据并不总是像期望的那样被构造和析构,在跨平台环境中尤其如此。...如果一个成员变量本身是互斥的,那么应该是可变的,这是在const成员函数中使用它所必需的。

    84020

    深入理解 C++ 中的多态与文件操作

    C++ 多态多态(Polymorphism)是面向对象编程(OOP)的核心概念之一,它允许对象在相同操作下表现出不同的行为。在 C++ 中,多态通常通过继承和虚函数来实现。...虚函数: 虚函数是带有 virtual 关键字的成员函数。当调用虚函数时,实际执行的代码将取决于指向的对象的类型。总结多态是面向对象编程中一个强大的工具,它允许您创建更灵活、更可维护的代码。...C++ 文件操作C++ 提供了多种机制来操作文件,包括创建、读取、写入和修改文件。常用的文件操作库包括 fstream 和 filesystem>。1....示例:创建并写入文件#include #include filesystem>using namespace std;namespace fs = std::filesystem;...>using namespace std;namespace fs = std::filesystem;int main() { // 创建文件路径 fs::path myFile("myfile.txt

    48210

    C++17,标准库变化的更多细节

    让我们首先来看下之前未提到过的新内容. std::byte 独立类型 std::byte 实现了 C++ 语言定义中的字节概念,他能用于访问对象的原始内存,不同于 char 等字节类型(也可以用于访问对象的原始内存...15行的 std::chrono::system_clock. ftime 的类型为 std::filesystem::file_time_type, 在服务器上(译注:作者在cppreference.com...(第17行),程序输出却并没有什么变化,这一度困扰了我,因为协调世界时(Coordinated Universal Time (UTC))在德国(译注:作者为德国人)与本地时间应该有2个小时的时差,但是后来想到代码是在服务器上运行的...,而服务器上的协调世界时与本地时间没有时差,所以程序的输出也就没有变化了....Space info 全局函数 std::filesystem::space 可以返回一个 std::filesystem::space_info 对象,该对象包含了3个成员: capacity, free

    98510

    C++实现对回收站里的文件进行操作|技术创作特训营第一期

    本篇文章主要为大家详细介绍了C++如何使用代码对回收站里的文件进行操作,譬如文件的删除与恢复等。...fAnyOperationsAborted;LPVOID hNameMappings;LPCWSTR lpszProgressTitle;} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;成员变量...下面是Boost库中一些常用模块和其功能的简要介绍:1、Boost.Filesystem(文件系统):该模块为C++操作文件系统提供了便捷且跨平台的接口,包括文件路径操作、目录遍历、文件访问等。...这些模块为C++开发者提供了丰富的工具和功能,方便开发高效且可靠的应用程序。...().string() std::endl; } return 0;}使用Boost库的boost::filesystem::rename函数将文件恢复到原始路径:#include <

    89600

    学过 C++ 的你,不得不知的这 10 条细节!

    我在阅读 《Effective C++ (第三版本)》 书时做了不少笔记,从中收获了非常多,也明白为什么会书中前言的第一句话会说: 对于书中的「条款」这一词,我更喜欢以「细节」替换,毕竟年轻的我们在打...需要注意的是:我们可以在 non-const 成员函数调用 const 成员函数,但是不可以反过来,在 const 成员函数调用 non-const 成员函数调用,原因是对象有可能因此改动,这会违背了...因为 C++ 规定,对象的成员变量的初始化动作发生在进入构造函数本体之前,在构造函数内,都不算是被初始化,而是被赋值。...std::size_t numDisk() const; // 众多成员函数之一 ... }; extern FileSystem tfs; // 预备给其他程序员使用对象 现假设另外一个程序员建立一个...我旧文里《C++ 赋值运算符'='的重载(浅拷贝、深拷贝)》在规避这个问题试,就采用的是方式 一,这个方式是不合适的。

    1K20

    蓝桥ROS机器人之现代C++学习笔记第 8 章 文件系统

    该库的动机是需要在 C++ 程序中执行可移植的类似脚本的操作。其目的不是与 Python、Perl 或 shell 语言竞争,而是在 C++ 已经是首选语言时提供可移植的文件系统操作。...使用是安全的,因为大多数函数在检测到错误时都会抛出 C++ 异常,因此不能忽略错误。这对用户来说也很方便,因为它减少了显式检查错误返回代码的需要。...C++ 标准委员会接受了在技术报告 2 中包含 Boost.Filesystem 的提案 N1975。...Boost.Filesystem 库提供了几个头文件: 头文件 filesystem.hpp> 提供类 basic_path,这是一种在 C++ 程序中表示路径的可移植机制。...☞ en.cppreference.com/w/cpp/filesystem 文件系统库  C++ 文件系统库 Filesystem 库提供了对文件系统及其组件(例如路径、常规文件和目录)执行操作的工具

    1K20

    综合:日志的实现

    原因我们之前在C++的多态那里讲了,这里防止大家忘记,我这里再重新简单说一下: class Base { public: ~Base() { cout 在调用它之前需要先进行判断该路径是否真实存在,这个就需要用到另外一个接口:exists,这个同样是在#include filesystem>头文件中。...另外,由于目录创建可能因权限不足/磁盘满/路径非法等失败,所以为了处理这个错误,我们需要捕捉异常,这个错误通常是在create_directories中出现,其对应的异常类型为:std::filesystem...,并不是真正的日志类,大家有没有注意到一个问题,我们打印的message,从何而来?...嵌套类天生具有访问父类private成员的权限,也就是说他可以访问到我们的智能指针,随后调用其策略。 我们可以在嵌套类的构造中完成对完整的打印信息字符串string message的创建。

    18810

    【C++】继承 ③ ( 继承的一些重要特性 | 子类拥有父类的所有成员 | 多态性 | 子类可以拥有父类没有的成员 | 代码示例 )

    父类 的 私有成员 , 必须通过 父类的 公有或受保护 的成员函数 访问 父类的 私有成员 ; 子类 不能访问 父类的 私有成员 , 并不代表 子类 中没有 父类的 私有成员 ; 下面的 Parent...callPrivateFun 函数 , 调用 privateFun 私有函数 ; 此时 , 在 子类中 , 可以通过调用 callPrivateFun 函数 , 间接调用 父类的 privateFun...父类的 私有成员 ; Child c; c.publicFunChild(); // 间接调用父类的 私有成员 c.callPrivateFun(); 2、子类可以拥有父类没有的成员...子类 可以 在 继承自 父类 的 成员变量 和 成员函数 基础上 , 定义 其它的 成员变量 和 成员函数 ; 因此 , 子类 可以 拥有 父类 所没有的 成员变量 和 成员函数 ; 在下面的代码中...//c2.publicFunChild(); 二、代码示例 ---- 代码示例 : #include "iostream" using namespace std; #include <iostream

    1.6K30

    4.5 C++ Boost 文件目录操作库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。...Boost库已被广泛应用于许多不同领域的C++应用程序开发中,如网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。...在Boost库出现之前,C++对于文件和目录的操作需要调用底层接口操作,非常不友好,而且不同平台的接口差异也很大,难以移植。...在本节中,我们将重点介绍如何使用Path目录类,包括如何创建和初始化Path对象、如何获取和设置路径成员变量、如何查询路径是否存在和创建路径、如何拼接和规范化路径等。...Boost库中的Path目录类提供了一系列便捷的方法来实现路径拼接和追加操作,在本节中,我们将重点介绍如何在Boost库中进行路径拼接和追加操作,包括如何使用Path类成员函数来拼接路径、如何使用运算符

    96620

    C++实现的代码行数统计器

    C++写过多少行,5万还是10万,用来评估熟练度,有点难顶,于是写个代码统计器吧,输入文件夹目录或者代码文件,可以统计所有代码的行数 可以直接编译代码运行程序,在控制台输入目录的路径按下回车即可,例如输入...C:\Users\Yezi\Desktop\C++\CodeCounter 也可以在终端命令行直接运行编译好的程序,带上参数运行,例如输入 ....\CodeCounter.exe C:\Users\Yezi\Desktop\C++\CodeCounter 思路比较简单,主要是用到了C++17的filesystem库用来解析目录和提取文件后缀,如果路径是个目录就提取子目录项逐个分析...::filesystem::path &path) { // 常见代码文件后缀 static const std::vectorstd::string> extensions...::filesystem::exists(path) == false) { std::cerr std::endl

    56500

    4.5 C++ Boost 文件目录操作库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。...Boost库已被广泛应用于许多不同领域的C++应用程序开发中,如网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。...在Boost库出现之前,C++对于文件和目录的操作需要调用底层接口操作,非常不友好,而且不同平台的接口差异也很大,难以移植。...在本节中,我们将重点介绍如何使用Path目录类,包括如何创建和初始化Path对象、如何获取和设置路径成员变量、如何查询路径是否存在和创建路径、如何拼接和规范化路径等。...Boost库中的Path目录类提供了一系列便捷的方法来实现路径拼接和追加操作,在本节中,我们将重点介绍如何在Boost库中进行路径拼接和追加操作,包括如何使用Path类成员函数来拼接路径、如何使用运算符

    1.1K10
    领券