ZHXILIN'S BLOG
Home
Programming in C++
About
  • C++闭包

    Apr 26, 2022 C++

    闭包,closure,一般是指带有状态的函数,这里的状态指的是调用环境的上下文。一个函数带上了状态,就是闭包。那么闭包就需要有捕获并持有外部作用域变量的能力,闭包状态的捆绑发生在运行时。在C++中,闭包的实现方式包括仿函数、std::bind()绑定器以及lambda表达式。仿函数在以前的文章《C++仿函数》中以前介绍过了,本文将重点讨论另外两种闭包实现类型的用法和原理。

    Read More
  • C++复制消除与RVO/NRVO

    Apr 25, 2022 C++

    C++11标准明确提出了复制消除(copy elision)优化技术,复制消除要求编译器在满足一些特定条件时,省略类对象的拷贝和移动构造,以达到优化效果。复制消除主要发生在两种条件下,即函数参数是值语义以及函数返回值是值语义。而RVO和NRVO是函数返回值优化的两种技术,NRVO从C++11开始加入C++标准。

    本文我们将讨论的主题围绕函数返回值优化,先了解RVO和NRVO在不同的现代C++版本中,启用和关闭编译器优化之后各自的表现;接着我们将分析RVO和NRVO的实现原理;最后聊一下优化失效的情形。

    Read More
  • C++引用包装

    Apr 24, 2022 C++

    现代C++引入一个std::ref()用来模拟某个变量的引用。C++原来就有引用,为什么还需要模拟引用呢?这是为了解决某些场景下,只能值传递传参,却需要对传入的参数进行修改的问题。这类问题往往出现在函数式编程里。

    理解std::ref()之前还需要先了解一个引用包装(reference wrapper)的概念,std::ref()的返回值就是一个引用包装。

    本文围绕<refwrap>头文件提供的std::reference_wrapper和std::ref的实现细节,来说明为什么需要这项技术。

    Read More
  • C++移动语义、万能引用、引用折叠、完美转发

    Apr 22, 2022 C++

    现代C++提供了移动语义相关的操作,通过移动语义可以将资源的所有权转移到新的对象上,从而避免数据拷贝带来的性能开销。移动语义实现了从一个对象到另一个对象的资源转移的过程。标准库为移动语义提供了辅助函数std::move(),用于执行一个无条件的对rvalue的转换,对于函数本身而言,并不移动任何内容,只是强制转化左值引用为右值引用,从而通过这个右值引用使用该值,以用于移动语义。与之类似的还有一个辅助函数std::forward(),它和std::move()类似,但只有在参数被一个lvalue初始化时,才会转换为rvalue。std::forward()还能将一组参数原封不动地传递给另一个函数,包括参数的属性(左值/右值和const …

    Read More
  • C++ NULL与nullptr

    Apr 22, 2022 C++

    在C语言中,我们使用NULL来代表一个空指针,而这种做法在现代C++是不允许的。在现代C++中,NULL本质上是一个类型为long int的数值0,而空指针需要用C++11新引入的nullptr来表示。

    那么在现代C++中,NULL和nullptr使用上有什么区别?为什么会有nullptr?本节内容将一一解答。

    Read More
  • C++智能指针

    Apr 19, 2022 C++

    在传统C++中,我们一般使用new/delete或malloc/free等方式来管理内存,但是由于申请内存和释放内存的过程都需要开发者自己维护,而只要是需要手动管理的逻辑,就有可能出现忘记释放或者多次释放内存的错误,这也是传统C++一致为人诟病的一个问题。在现代C++中,标准库提供了智能指针的实现,这些指针用于帮助确保程序不会出现内存和资源泄露,并具有异常安全。可以说现代C++的智能指针使得内存管理更加方便更加安全。本节内容我们将解析各类智能指针的底层实现原理。

    Read More
  • C++内存对齐

    Apr 18, 2022 C++

    现代计算机的处理器为了高效地处理数据的存取,会以内存存取粒度为单位进行。为了让数据在内容中能够以内存存取粒度为单位进行排列,就需要内存对齐技术。本节内容将介绍内存对齐的意义和内存对齐规则。

    Read More
  • C++位域

    Apr 15, 2022 C++

    位域是一种特殊的数据结构,可以节省内存资源,使数据结构的存储更加紧凑。本节内容将全面了解一下位域的方方面面。

    Read More
  • C++ RTTI与反射

    Apr 15, 2022 C++

    前文《对象内存模型》在介绍C++对象内存模型中有提到过type_info对象。type_info是RTTI机制的核心内容。那什么是RTTI?反射和RTTI又有什么关系?本节内容将一一解答。

    Read More
  • C++对象内存模型

    Apr 12, 2022 C++

    C++的三大特性是封装、继承和多态,而要理解这些特性的底层原理,就不得不说说C++对象的内存模型(布局)。

    对于一个C++对象,每个对象有独立的非静态数据成员,而内存中只有一份成员函数,所有该类的对象共享成员函数;static数据成员属于类,它们存储在静态存储区,该类的所有对象共享。当调用对象的成员函数时,又是怎么识别是哪个对象在调用呢?实际上,所有类的成员函数在编译期会被编译器重构成非成员函数,即将this指针作为函数的第一个参数,这样在函数中通过this指针就能找到属于该对象的其他数据成员了。这些都是理解C++对象内存模型的前提。

    当出现了类的继承关系,且存在虚函数的时候,情况就复杂了。本节内容将详细介绍单一继承、多重继承、重复 …

    Read More
    • ««
    • «
    • 1
    • 2
    • 3
    • 4
    • »
    • »»

zhxilin

Perfect World senior software engineer since 2014. Sun Yat-Sen University(SYSU) graduated student(2009-2013), major in Software Engineering. Interested in game server developing, dev-ops, algorithm and universal windows platform.
Read More

Featured Posts

  • 服务端技术栈知识体系
  • C++17更多新特性
  • C++17 constexpr的改进

Recent Posts

  • 服务端技术栈知识体系
  • C++17更多新特性
  • C++17 constexpr的改进
  • C++17 string_view的原理
  • C++17折叠表达式
  • C++17 if/switch语句初始化
  • C++17结构化绑定
  • C++17类模板参数推导

categories

TECHNOLOGY-STACK 47 服务端技术栈知识体系 47 TECHNOLOGY 5

tags

C++ 40 LINUX 4 ALGORIGTHM 2 APPLICATION-TECHNOLOGY 2 COMPILATION-PRINCIPLE 2 DATA-STRUCTURE 2 DATABASE 2 DISTRIBUTED-SYSTEM-DESIGN 2 NETWORKS 2 OPERATING-SYSTEM 2 SOFTWARE-ENGINEER 2 ALGORITHM 1 GITLAB 1 INDEX 1
All tags
ALGORIGTHM2 ALGORITHM1 APPLICATION-TECHNOLOGY2 C++40 COMPILATION-PRINCIPLE2 DATA-STRUCTURE2 DATABASE2 DISTRIBUTED-SYSTEM-DESIGN2 GITLAB1 INDEX1 LINUX4 MYSQL1 NETWORKS2 OPERATING-SYSTEM2 REDIS1 SOFTWARE-ENGINEER2 WEB-SEQURITY1 WSL21
[A~Z][0~9]

Copyright ©  ZHXILIN'S BLOG. All Rights Reserved. | Total View Times