Hasty Briefsbeta

双语

C++26: The Oxford Variadic Comma

2 months ago
  • #C++26
  • #programming
  • #language-features
  • C++26弃用了前面没有逗号的省略号参数(P3176R1提案)。
  • 这一变更提升了与C语言的兼容性,减少了与模板参数包的混淆,并为未来特性保留了设计空间。
  • 当前C++同时允许`void foo(int, ...)`(兼容C)和`void foo(int...)`(仅C++),但后者现被弃用。
  • 无逗号形式曾引发混淆,特别是在模板参数包和简写函数模板场景中。
  • 该弃用影响`void f(int...)`和`void g(auto args...)`等语法,建议改用`void f(int, ...)`形式。
  • 独立的省略号参数(`void f(...)`)仍保持有效。
  • 此次变更是弃用而非移除,便于自动化修复。
  • 此举为未来特性(如同质可变函数参数)的提案扫清了道路。