- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在C++中,函数、变量和常量的声明和定义可以这样分开:
function someFunc();
function someFunc()
{
//Implementation.
}
其实在类的定义中,经常会出现这种情况。类通常在 .h 文件中声明它的成员,然后在相应的 .C 文件中定义这些成员。
这种方法的优点和缺点是什么?
最佳答案
从历史上看,这是为了帮助编译器。在它使用名称之前,您必须给它一个名称列表 - 无论这是实际用法,还是前向声明(C 的默认函数原型(prototype)除外)。
现代语言的现代编译器表明这不再是必需的,因此 C 和 C++(以及 Objective-C,可能还有其他)的语法在这里是历史包袱。事实上,这是 C++ 的一大问题,即使添加适当的模块系统也无法解决。
缺点是:许多严重嵌套的包含文件(我之前跟踪过包含树,它们非常大)和声明和定义之间的冗余 - 所有这些都会导致更长的编码时间和更长的编译时间(曾经比较过之间的编译时间)可比较的 C++ 和 C# 项目?这是造成差异的原因之一)。必须为您提供的任何组件的用户提供头文件。 ODR 违规的可能性。依赖预处理器(许多现代语言不需要预处理器步骤),这会使您的代码更脆弱,更难被工具解析。
优点:不多。您可能会争辩说,为了文档的目的,您得到了一个函数名称列表,这些函数名称被组合在一个地方——但是现在大多数 IDE 都具有某种代码折叠功能,无论如何,任何规模的项目都应该使用文档生成器(例如 doxygen)。使用更简洁、无预处理器、基于模块的语法,工具可以更轻松地遵循您的代码并提供此功能以及更多功能,因此我认为这种“优势”几乎没有实际意义。
关于c++ - C++中声明和定义分开的优点和缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/645778/
我是一名优秀的程序员,十分优秀!