在 C++17 中,可以使用 u8
字符串文字初始化 char
的数组。 在 C++20 中,此初始化格式不正确,并导致编译器错误 C2440。 这种行为可能是一个破坏源的变化。 可以通过指定 /Zc:char8_t-
将编译器显式恢复为 C++14 或 C++17 行为。
示例:
const char* s = u8"Hello"; // Compiles in C++17, Error C2440 in C++20
const char8_t* s = u8"Hello"; // Compiles in C++20 or with /Zc:char8_t
在 Visual Studio 中设置此编译器选项
-
打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
-
选择“配置属性”>“C/C++”>“命令行”属性页。
-
将
/Zc:char8_t
或/Zc:char8_t-
添加到“附加选项:”窗格中。