是否有充分理由将所有或大部分参考参数设为const?
我正在阅读Google C ++样式指南,但我无法理解为什么“所有通过引用传递的参数都必须标记为const”。 (见here)
我知道有很多人批评这个指南,就像在article中一样。我正在寻找一个能够为上述“必须”提供逻辑论证的答案,但不仅仅是认为谷歌是错误的。
答案 0 :(得分:2)
似乎他们认为非const
引用允许可变引用语义而不会在代码中显而易见。使用指针时,您必须明确地执行间接(使用*
),这显然表明您正在使用引用语义。
我不会说这是一个特别好的论点。相反,如果可以的话,我建议一起避免可变引用语义(无论是引用还是指针)。值语义更容易推理。此外,当单个返回类型不够时,传统上非const
引用参数用于输出参数。如今,如果我们想要多个输出,我们可以轻松返回std::tuple
。
我想说非const
引用和指针参数在现代C ++代码中并没有太大的位置。
答案 1 :(得分:1)
只是澄清输入和输出。输入值应作为const引用(因为它们是纯输入,它们不应该更改参数的值)或值。输出应该是指针。每当看到指针时,都会输出(或输入 - 输出)。无论何时看到引用,都是输入。
答案 2 :(得分:1)
据我所知,非const
引用被禁止的原因是它可以很容易地判断一个参数何时可能被修改:如果你传入一个指向它的指针,那么它可能是修改,但如果你通过引用传递它,它肯定不会。
foo(bar, &baz); // baz may be modified, bar will not be modified
如果允许foo
通过非const
引用接受参数,那么它可能会修改参数,即使参数的地址未在任何地方显式获取。
答案 3 :(得分:1)
它实际上并不是一个糟糕的主意,在我没有注意到的情况下,多次发生在我身上的事件让我感到惊讶的是,这些函数改变了作为参数传递的变量。