2.14.8 User-defined literals 11

书籍:《ISO/IEC 14882 2014》

说明:以上内容大部分来自腾讯元宝

如何理解以下内容:

10 Some identifier s appearing as ud-suffixes are reserved for future standardization ( 17.6.4.3.5 ). A program containing such a ud-suffix is ill-formed, no diagnostic required.

在C++中,用户定义字面量(UD-SL)的后缀保留规则可通过以下要点理解:


1. ​​保留后缀的定义​

某些标识符作为UD-SL的后缀被​​标准库保留​​,用于未来标准化扩展。这些后缀包括:

  • ​以双下划线开头的标识符​​(如__foo):属于实现保留的命名空间。
  • ​特定单下划线后跟大写字母的组合​​(如_X):可能被未来标准用于新字面量类型。

​示例​​:

// 非法:使用保留后缀 _X
auto value = 123_X; 

2. ​​程序状态​

  • ​非法性​​:使用保留后缀的程序属于​​未定义行为​​(ill-formed),但编译器可能不报错(no diagnostic required)。
  • ​风险​​:可能导致跨平台兼容性问题或未来标准升级时的编译失败。

3. ​​命名规范建议​

  • ​以下划线开头​​:用户自定义后缀应以单下划线开头(如_path),但需避免与保留模式冲突。
  • ​避免特殊组合​​:如_L_u8等可能与未来标准冲突的命名。

​合法示例​​:

// 合法:单下划线开头,无保留模式
std::string operator""_file(const char* str, size_t len) {
    return "/usr/local/" + std::string(str, len);
}

4. ​​与标准库的对比​

类型 后缀示例 是否保留
用户定义字面量 _path
标准库保留后缀 __core
标准库非保留后缀 L(长整型)

5. ​​实际影响​

  • ​编译器行为​​:若使用保留后缀,编译器可能静默忽略或生成不可预测的结果。
  • ​代码移植性​​:未来标准若采用该保留后缀,现有代码需修改。

6. ​​设计建议​

  • ​命名空间隔离​​:通过命名空间区分自定义后缀(如ns::_custom),但需注意运算符查找规则。
  • ​文档记录​​:明确团队内UD-SL后缀的命名规范,避免误用保留标识符。

总结

用户定义字面量后缀的保留规则核心在于:

  1. ​避免与标准库保留模式冲突​​:如双下划线开头或特定单下划线组合。
  2. ​遵循命名规范​​:使用单下划线开头且无特殊含义的标识符。
  3. ​风险控制​​:防止因保留后缀导致的未定义行为。

开发者应通过合理命名和代码审查规避此类问题,确保代码的健壮性和可维护性。

你可能感兴趣的:(ISO/IEC,14882,2014,C++)