18 March 2023

C++ 核心指南目录

“Declare one name (only) per declaration”

理由

一行只声明一个变量可以提升可读性,避免语法相关的错误。也能有助于添加行尾注释。

坏例子

char *p, c, a[7], *pp[7], **aa[10];   // yuck!

例外

函数声明中可以有多个参数声明。

例外

结构化绑定(C++17)设计的目的是为了引入多个变量:

auto [iter, inserted] = m.insert_or_assign(k, val);
if (inserted) { /* new entry was inserted */ }

例子

template<class InputIterator, class Predicate>
bool any_of(InputIterator first, InputIterator last, Predicate pred);

或者使用概念(concept)会更好:

bool any_of(input_iterator auto first, input_iterator auto last, predicate auto pred);

例子

double scalbn(double x, int n);   // OK: x * pow(FLT_RADIX, n); FLT_RADIX is usually 2

double scalbn(    // better: x * pow(FLT_RADIX, n); FLT_RADIX is usually 2
    double x,     // base value
    int n         // exponent
);

// better: base * pow(FLT_RADIX, exponent); FLT_RADIX is usually 2
double scalbn(double base, int exponent);

例子

int a = 10, b = 11, c = 12, d, e = 14, f = 15;

这种过长的初始化过程很容易不小心引入未初始化的变量。

强化

标注一行声明多个变量或常量的情况(如 int* p, q;)