是否存在基于参数设置变量的约定?

时间:2012-04-19 12:41:11

标签: c++ conventions

假设我有一个标志或其他功能:

void foo (Param p1, Param p2, bool setVariable)
{
    //if setVariable is true, set some bool var to true, else false
}

对于以下其他人,是否有强烈的偏好?

if (setVariable)
    _someClassVariable = true;
else
    _someClassVariable = false;

_someClassVariable = setVariable;

显然第二种是打字较少,但第一种打击让我更具可读性。哪一个会更受欢迎?

4 个答案:

答案 0 :(得分:3)

我会选择第二个,它就像可读一样。可读性更多地取决于变量的名称而不是两个选项的选择。如果变量和参数具有良好的名称,则赋值将是自然的。这类似于从你不会做的函数返回一个布尔值:

bool conditionHolds() {
    if (condition)
       return true;
    else
       return false;
}

(如果你正在考虑这样做,请重新考虑一下)

答案 1 :(得分:3)

我通常更喜欢第二种。对我而言,第一个是强烈的警告,即编写代码的人最多只能胜任。

那就是说,我也倾向于建议不要将bool作为参数传递。 foo(true);foo(false);的真正含义很少见。通常最好使用枚举,以便获得foo(do_this);foo(do_that);

答案 2 :(得分:2)

我更喜欢第二个。如果较少的打字不足以成为你的争论,也要考虑你的同事的意见。如果我看到像

这样的话,我个人会笑
if (condition)
   return true;
else
   return false;

在生产代码中。 (如果变量是bool,并且您没有使用它来实现某些转换机制)。

答案 3 :(得分:2)

后者要好得多,if else看起来无用,在代码和编译器生成的代码中引入了额外的复杂性(虽然PROBABLY优化了)。

我也会避免使用前导下划线表示法,其中一些名称是为标准库和编译器保留的。