我习惯于D编码和Python,其中类定义也包含每个方法定义。所以这是我最喜欢的编码风格。
我讨厌切换到.cpp文件并使用那个长限定符名。
所以,由于我很少调用一个函数超过2-3次,所以将我的大部分代码内联不是一个好主意吗?我的代码不是库。这是一个供数学家使用的桌面应用程序。
这对我来说很有意义。这样可以吗?谢谢。
发布于 2018-09-05 07:14:41
在编写C++时,不要像编写Python、D或Java那样编写它。那是基本不同的语言和不同的习语。
当我们在C++中讨论内联函数时,我们必须区分两个相关但不同的概念:
inline在标头中起作用。类声明中的函数定义是隐式inline。模板通常是内联的。inline函数(或变量)实际上禁用了一元定义规则(ODR):如果链接器在不同的编译单元中看到相同函数的多个相互冲突的定义,链接器通常会显示一个错误。但是对于inline函数,您可以保证所有定义都是相同的。此外,内联函数只能从定义它的同一编译单元调用。inline函数的语义使内联成为可能,但inline关键字并不意味着函数将内联。例如,内联定义的成员函数不能通过间接调用(例如虚拟调用)进行内联。inline函数提供内部联动,或者通过免费函数/变量的static关键字(但不是成员!),使它们的内联成为可能!或者通过使用匿名命名空间。__attribute__ ((always_inline))GCC。不宜在标头中内联定义所有函数。
inline,那么在标头中定义它将一无所获。如果您不喜欢经常在头文件和实现文件之间切换,我建议您考虑使用一个IDE,它可以让您更容易地在声明和相应定义之间切换。
是的,C/C++可以是非常烦人的语言,因为它们具有历史意义。是的,Java代码读起来更好。但是,尝试编写C++不会有任何好处,就好像它是Java一样。你就会放弃C++所能提供的好处。类似地,现代C++避免使用new创建对象,因为这实际上放弃了RAII。
发布于 2018-09-05 06:56:03
如果内联是指使用inline函数,则不需要:
inline关键字,编译器将允许头包含在多个地方,可以理解它在任何地方都是相同的函数。如果没有inline,如果同一个标头包含在不同的单元中,则可能会破坏一个定义规则(ODR)。如果您所说的内联意味着将成员函数定义放在标题中的类定义中,那么这个实践并不是推荐的做法。如果在每个编译单元中对同一个类使用完全相同的令牌序列,则不会破坏ODR规则。但是有几件事情更难做(特别是当两个类之间存在一些相互依赖时)。将类定义与其实现分离,具有鼓励封装的优点。
发布于 2018-09-05 09:23:23
我真的很喜欢一个记录良好的头文件,它只告诉我我想知道的东西:类和方法名称,方法的规格是什么。我不想看你的源代码。这只会让我更难读到我想要的东西。
Swift很好地做到了这一点:按照您想要的方式编写代码,如果我想看到它们,IDE会生成头文件,并且它们只包含感兴趣的内容(比如没有私有方法或属性)。
https://softwareengineering.stackexchange.com/questions/377949
复制相似问题