Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 参数的最佳实践?_C++_Coding Style - Fatal编程技术网

C++ 参数的最佳实践?

C++ 参数的最佳实践?,c++,coding-style,C++,Coding Style,如果可以的话,一般认为将参数作为指针传递比作为值传递更好吗?显然,这在很大程度上取决于情况,但当有选择时,使用指针是否更好 这仅仅是因为记忆的原因吗 如果它是真的,指针或引用,传递什么更好?一些一般经验法则: 如果需要修改,请传递指针或引用。如果该值可能为null,则传递指针,否则传递引用 如果它很大,根据null是否为合法值,传递常量指针或常量引用 如果使用指针,则更喜欢智能指针而不是裸指针 否则,按值传递。最好不要传递指针 传递常量引用以避免复制成本 如果希望函数修改原始值,请按引用传递 否

如果可以的话,一般认为将参数作为指针传递比作为值传递更好吗?显然,这在很大程度上取决于情况,但当有选择时,使用指针是否更好

这仅仅是因为记忆的原因吗


如果它是真的,指针或引用,传递什么更好?

一些一般经验法则:

如果需要修改,请传递指针或引用。如果该值可能为null,则传递指针,否则传递引用

如果它很大,根据null是否为合法值,传递常量指针或常量引用

如果使用指针,则更喜欢智能指针而不是裸指针


否则,按值传递。

最好不要传递指针

  • 传递常量引用以避免复制成本

  • 如果希望函数修改原始值,请按引用传递

  • 否则按值传递

  • 指针不应在原始(无所有权语义)中被传递
    指针不应位于智能指针或容器类之外

  • 只有当对象可能为NULL且所有权未显式传递(通过大量文档)时,才应该传递指针


  • 我唯一希望看到指针的时间是当我不能使用引用(即它可能为NULL)时,而引用实际上从未使用过(或包装在容器方法的深处)。

    这取决于您传递的参数类型。如果参数大小合理(同样由您决定)较低,则您可能希望按值传递


    对于大尺寸的结构/数组,最好忽略它。除此之外,如果参数不可修改,那么您也可以在C++中添加<代码> const .< /p> ,当您通过值时,它调用自定义类的复制构造函数。如果要传递向量或大型数据结构,这可能会非常昂贵


    您应该使用const和reference来不复制它,并且仍然保护该值。否则,将值用于较小的对象(如int)通常是合理的。

    我通常通过引用(可能是常量)传递输入参数,通过指针传递输出参数

    这样,可以立即看到哪些参数是输入参数,哪些参数是输出参数(被调用方修改其内容)


    当然,形成像int、Lon等小类型,我不关心引用。

    如果这被标记为C++,为什么不引用而不是指针?这个字永远不应该被使用。有些情况下,您必须传递指针,特别是当
    NULL
    可能是函数的有效参数时,那么引用可能没有意义;可能不会使用智能指针。最佳做法并非包罗万象。因此,这是不恰当的。最好从永远不做开始,然后一旦你理解了语言,就学会例外。洛基:短语“最佳实践”并不意味着永远。很少有实例表明最佳实践实际上是更糟糕的实践。@Nawaz:是的。因此,最好总是使用“最佳实践”,直到你明白什么时候不应该这样做。因此最佳实践而不是法律。@Andy Thomas Cramer:我宁愿不使用指针(但不幸的是,有时我需要),但最佳实践仍然是永远不使用指针。:-。。。有意相对的术语。问题在于复制值的成本是否高于指向该值的指针,以及这是否重要。就我个人而言,任何超过8字节左右的内容,我倾向于传递指针或引用。。。。也可能意味着“任何需要一个不平凡的复制构造函数的东西”,尽管这通常需要一个“大”的大小。我在“复制成本更高”中提到了这一点,但应该是明确的。大小通常是导致复制成本的原因,但这不是唯一的原因。传递指针/引用和常量指针/引用之间有什么区别?如果对象是“大”的,为什么会选择一个呢?@SirYakalot:如果您通常会通过值传递某个对象,并决定通过ptr/reference传递它(无论出于何种原因),那么您更喜欢通过
    const
    reference传递,而不是非
    const
    reference传递。这是因为当您传递值时,函数无法修改调用者的值副本。因此,为了保持相同的语义,通过
    const
    reference传递函数,因为通过非
    const
    reference传递函数可以更改调用方的值。希望这有意义。输入参数可以通过引用或指针传递。常量限定指针或引用表示输入参数。非常量限定指针或引用表示输出参数或常量不正确。