extern
在 C++ 中使用它是否有可能获得任何好处?例如,假设程序不使用全局变量。想到的第一个想法是尝试使用 extern 来使用函数而不在标头中声明它们(这可能会提高编译速度 - 但它也会降低链接速度,例如)。总的来说有点看不懂,可能只是c的雏形,在c++中意义不大。
extern
在 C++ 中使用它是否有可能获得任何好处?例如,假设程序不使用全局变量。想到的第一个想法是尝试使用 extern 来使用函数而不在标头中声明它们(这可能会提高编译速度 - 但它也会降低链接速度,例如)。总的来说有点看不懂,可能只是c的雏形,在c++中意义不大。
这个问题通常在文档和论坛http://www.cplusplus.com/forum/general/21368/中得到回答
首先。"利益"的概念在这里不适用。extern 关键字执行其他方式无法实现的功能。抱歉,一种语言很少会白白留下一些额外的东西(register 关键字是一种非常特殊的情况)
extern关键字在三种情况下使用
使用外部绑定说明符描述静态存储。
要指定语言,“C”或“C++”。这会影响 C++ 是否发生名称重整)。请注意,这并不意味着代码“像在 C 中一样”编译。
类型模板(extern template)的显式实例化声明。在C++11之前,这只是一种语言扩展(最初是IBM编译器),使用某些编译器时不需要extern。对于给定的参数列表,它只允许使用一次。
extern template сlass-name < argument-list >;
声明显式模板实例化(外部模板)允许您跳过隐式模板代码生成步骤,而是使用在别处定义的模板实例(如果未生成模板实例,将导致链接器错误)。在 C++ 中,在除了一个源文件之外的所有源文件中声明一个显式特化,它已被完全定义,可以节省编译时间。
extern最常见的用途是在不同程序模块之间隐式共享共享数据。在处理设计不佳的库时经常使用。创建一个全局变量并将其与 extern 挂钩比编写多个访问器更容易。
它唯一的优点是没有额外的时间花费在数据交换上,因为每个模块的数据总是在手边,并且不需要同步(仅在单线程模式下)。在现代现实中,extern 的使用只能在微控制器的软件中使用,并且只有在速度非常重要的特殊情况下才能使用。
它的使用会极大地混淆程序的结构并导致意大利面条式代码。最好遵守这条规则:如果你可以不用 extern,那么你就需要不用它。