Skip to content

Blogs

让 Clangd 支持 GCC 的 C++23 Std Module

本文主要记录在 Arch Linux 上使用 GCC 15.2.1 编译器编译包含 import std; 的 C++23 标准模块(std module)代码时,如何让 Clangd 正常工作——即 import std; 不再被标记为红色波浪线提示“Module 'std' not found”,并且能够正常提供其中符号的悬停(Hover)提示。

C++ 标准中值类别的中文翻译

以下内容是《ISO/IEC 14882:2024》[7.2.1] Value category [basic.lval] 部分的中文翻译。标准文件可从此仓库下载。


          expression         
           /     \           
          /       \          
     glvalue      rvalue     
      /    \      /   \      
     /      \    /     \     
 lvalue     xvalue    prvalue
  • glvalue(泛左值)是一个表达式,其求值结果决定了某个对象或函数的身份(identity)。
  • prvalue(纯右值)是一个表达式,其求值用于初始化一个对象、或在特定上下文中计算某个运算符的操作数,或者是一个类型为 cv void 的表达式。

核心 Linux Socket API 用法释义

1. socket()

int socket(int 协议族, int 套接字类型, int 协议);

📖 解释:创建一个新的套接字,返回一个文件描述符用于后续网络通信.

第 1 个参数 🔑:协议族,指定通信协议类型.
- 示例:AF_INET(IPv4协议)、AF_INET6(IPv6协议)、AF_UNIX(本地进程间通信).

在 Arch Linux 上编译 bloomberg/clang-p2996 小记

本文简要记录笔者在 Arch Linux 上编译一个部分支持 C++ 反射的 clang 编译器的过程。

期待 Reflection 能正式被编译器实现的那一天。 :)

本次实验受群友 Yiran Wang 启发。

克隆仓库

GitHub 仓库在 这里,有关这个编译器的介绍详情请看仓库(默认是 purpose 分支,代码在 p2996 分支上)。

C++ 库中的高效闰年判断算法解析

在 C++ <chrono> 库中,有如下判断闰年的算法:

class year
{
private:
    short _M_y;

public:
    constexpr bool
    is_leap() const noexcept
    {
        return (_M_y & (_M_y % 25 == 0 ? 15 : 3)) == 0;
    }
};

根据源代码的注释,总结一下优化思路: