Lobsters | 原文链接 | 2026-09-19 收录

C++20 的 u8/char8_t 向后兼容翻车:同一段代码在 C++17 能编,到 C++20 就报错

来源: giodicanio.com — 2026-09-11

概述

文章用最小例子打破「每个新 C++ 版本都向后兼容」的迷思:C++17 下能把 u8 字面量直接传给接收 const char* 的函数,切到 C++20 就编译失败,因为 u8 字面量的类型从 const char[N] 变成了 const char8_t[N],编码仍是 UTF-8。对依赖旧标准的大型库与既有代码库来说,升级标准时这类破坏会集中爆发。

核心要点

金句

有一种迷思认为每个新的 C++ 版本都与旧版本向后兼容——总体上有这个趋势,但并不总是如此。
返回 Lobsters 首页