26 September 2023
“Use {}
rather than ()
within templates to avoid ambiguities”
理由
()
很容易导致语法模糊。
例子
template<typename T, typename U> void f(T t, U u) { T v1(T(u)); // mistake: oops, v1 is a function not a variable T v2{u}; // clear: obviously a variable auto x = T(u); // unclear: construction or cast? } f(1, "asdf"); // bad: cast from const char* to int
强化
- 标记通过
()
初始化的地方 - 标记函数风格的类型转换
Previous posts
- > CppCoreGuidelines T.67 通过特例化提供非正则类型的不同实现
- > CppCoreGuidelines T.65 通过标签分派机制提供函数的不同实现
- > CppCoreGuidelines T.64 实例化提供了模板类的多个实现
- > CppCoreGuidelines T.62 把不相关的类模板成员放进非模板化的基类中
- > CppCoreGuidelines T.61 不要过度把成员参数化
- > CppCoreGuidelines T.60 减少模板上下文依赖关系
- > CppCoreGuidelines T.49 如果可以,避免类型抹除
- > CppCoreGuidelines T.48 如果你的编译器不支持 concept 那么就用 enable_if 来假装 concept
- > CppCoreGuidelines T.47 高可见度的未限定的模板,避免用常见名字
- > CppCoreGuidelines T.46 要求模板参数至少是半正则的
- > CppCoreGuidelines T.44 用函数模板推演出模板参数类型(尽可能的)
- > CppCoreGuidelines T.43 用 using 来定义别名,避免用 typedef
- > CppCoreGuidelines T.42 用模板别名简化代码,隐藏实现细节
- > CppCoreGuidelines T.41 只在模板概念中要求最基本的属性
- > CppCoreGuidelines T.40 通过函数对象传递操作符给算法
- > CppCoreGuidelines T.26 最好用使用形式来定义概念,而不要用简单的语法
- > CppCoreGuidelines T.25 避免互补的约束
- > CppCoreGuidelines T.24 通过 tag 标签类或 traits 区分语义不同的概念
- > 单词本:ageism
- > CppCoreGuidelines T.23 通过添加新的使用模式扩展通用的概念