Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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++ .h中的define setter和getter是否会导致代码更具可读性?_C++_Coding Style_Inline_Setter_Getter - Fatal编程技术网

C++ .h中的define setter和getter是否会导致代码更具可读性?

C++ .h中的define setter和getter是否会导致代码更具可读性?,c++,coding-style,inline,setter,getter,C++,Coding Style,Inline,Setter,Getter,我有一些习惯(我想)用c++编写getter和setter: 我通常喜欢在.h而不是.cpp中定义getter和setter,因为我认为.cpp通常比.h有更多的代码,我想平衡.h和.cpp中的代码数量。此外,我认为getter和setter的更改频率比其他函数要低 我通常将getter和setter标记为“inline”,但不是出于性能目的:只需使用“inline”作为getter和setter的标记,当我看到“inline”时,我可以很快知道它是一个getter或setter方法。所以我将阻

我有一些习惯(我想)用c++编写getter和setter:

  • 我通常喜欢在.h而不是.cpp中定义getter和setter,因为我认为.cpp通常比.h有更多的代码,我想平衡.h和.cpp中的代码数量。此外,我认为getter和setter的更改频率比其他函数要低

  • 我通常将getter和setter标记为“inline”,但不是出于性能目的:只需使用“inline”作为getter和setter的标记,当我看到“inline”时,我可以很快知道它是一个getter或setter方法。所以我将阻止“内联”其他方法,因为“内联”只是用作将getter和setter与其他方法分开的标记

  • 但过了一段时间,我发现似乎没有人会把getter和setter放在。此外,内联getter和setter似乎并不常见

    这种习惯真的提高了可读性,还是只会导致代码不易理解和不合理

  • 您可以在.h文件中定义它,如果它们很短,这并不意味着代码的可读性。int getX()常量{return_x;} 如果这个函数很复杂,也许你应该避免
  • setter通常更复杂,这就是为什么您应该转到.cpp文件
  • 关于内联:
    • 在开发的优化步骤之前,不要在意它
    • h中的函数不会自动内联,甚至内联word也只是编译器的建议。(不同的编译器有_uforce_inline word)
  • 你应该阅读一些代码风格,例如谷歌C++代码风格或其他一些,并在其中获取一些规则。
    标记类定义中定义的函数是多余的,因为默认情况下这些函数都是内联的

    只有在头文件中定义类外的函数时,才应将定义标记为
    inline

    在类定义中定义简单的一行程序(如getter和setter)也是很常见的,不用担心。只需自动将所有单行函数放在那里,这是常见的做法

    从它们的
    get
    set
    前缀,以及它们的定义非常简短的事实,您可以快速看到哪些是getter和setter。这也可能有助于将他们在身体上分组

  • 虽然在头文件中放置getter和setter是很常见的,但我认为这不是一个好的实践。如果您需要更改这些函数,或者如果它们需要变得比单行函数更复杂,那么所有使用该头的编译单元都需要重新编译。如果担心编译器不再内联函数定义,只需制定一条规则,在.cpp文件中只包含函数定义,并在启用LTCG或LTO的情况下进行编译即可

  • 虽然从历史上看,关键字可能是编译器内联函数体的提示,但我所知道的所有现代编译器在决定如何最佳优化时都会忽略它。它唯一的现代用法是声明一个内联函数,该函数可以存在于多个编译单元中,而不违反一个定义规则。这是一个链接概念,是内联函数概念的一个独立概念,尽管考虑到过去多次使用关键字,这种混淆是可以理解的。类或结构定义中声明的所有函数都是隐式内联函数,因此无需显式使用
    inline
    关键字

  • 我通常喜欢在.h而不是.cpp中定义getter和setter,因为我认为.cpp通常比.h有更多的代码,我想平衡.h和.cpp中的代码数量

    有什么具体的理由这样做吗?您必须在应该的地方编写代码,而不是根据(有问题的)审美平衡感编写代码。此外,非常短的大量使用的头文件和较长的编译单元可能会减少总体编译时间

    此外,我认为getter和setter的更改频率比其他函数要低

    这对于减少编译时间是有意义的。如果头包含在许多其他编译单元中,但不要滥用它,编译时间很重要,但代码可读性更重要。只有当你使用的是一台非常旧的电脑或者你正在做一个巨大的项目时,才需要担心这个问题

    我通常将getter和setter标记为“inline”,但不是出于性能目的:只需使用“inline”作为getter和setter的标记,当我看到“inline”时,我可以很快知道它是一个getter或setter方法。所以我将阻止“内联”其他方法,因为“内联”只是用作将getter和setter与其他方法分开的标记

    绝对糟糕<代码>内联是给编译器一个内联该方法的提示,不要将其用于其他用途!您会使用(让我们想象一下)
    volatile
    突出显示仅在
    const
    函数中使用的变量吗?将语言结构用于它们的用途。总是

    但过了一段时间,我发现似乎没有人会把getter和setter放在

    有证据证明这一点吗

    此外,内联getter和setter似乎并不常见

    可能不是明确的(因为现在
    inline
    对其他程序员来说更像是一个提示,而不是编译器),但他们是内联的好人选,因为他们通常很简单,调用开销比他们执行的代码要高。不要担心它们放在哪里,如果编译检测到它会提高代码性能(在速度或内存占用方面),它会在没有您帮助的情况下使它们内联(但您可以使用一些特定于供应商的扩展强制它这样做或不这样做)

    这种习惯真的提高了可读性,还是只会导致代码不易理解和不合理

    在我看来(那是我做的标记)