RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 638833
Accepted
LmTinyToon
LmTinyToon
Asked:2020-03-13 18:53:16 +0000 UTC2020-03-13 18:53:16 +0000 UTC 2020-03-13 18:53:16 +0000 UTC

使用 extern 的好处?

  • 772

extern在 C++ 中使用它是否有可能获得任何好处?例如,假设程序不使用全局变量。想到的第一个想法是尝试使用 extern 来使用函数而不在标头中声明它们(这可能会提高编译速度 - 但它也会降低链接速度,例如)。总的来说有点看不懂,可能只是c的雏形,在c++中意义不大。

c++
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Swift - Friday Pie
    2020-03-13T21:30:35Z2020-03-13T21:30:35Z

    这个问题通常在文档和论坛http://www.cplusplus.com/forum/general/21368/中得到回答

    首先。"利益"的概念在这里不适用。extern 关键字执行其他方式无法实现的功能。抱歉,一种语言很少会白白留下一些额外的东西(register 关键字是一种非常特殊的情况)

    extern关键字在三种情况下使用

    1. 使用外部绑定说明符描述静态存储。

    2. 要指定语言,“C”或“C++”。这会影响 C++ 是否发生名称重整)。请注意,这并不意味着代码“像在 C 中一样”编译。

    3. 类型模板(extern template)的显式实例化声明。在C++11之前,这只是一种语言扩展(最初是IBM编译器),使用某些编译器时不需要extern。对于给定的参数列表,它只允许使用一次。

      extern template сlass-name < argument-list >;

    显式实例化声明(外部模板)跳过隐式实例化步骤:否则会导致隐式实例化的代码改为使用别处提供的显式实例化定义(如果不存在此类实例化,则会导致链接错误)。这可用于减少编译时间,方法是在除一个使用它的源文件之外的所有源文件中显式声明模板实例化,并在其余文件 (C++11) 中显式定义它。

    声明显式模板实例化(外部模板)允许您跳过隐式模板代码生成步骤,而是使用在别处定义的模板实例(如果未生成模板实例,将导致链接器错误)。在 C++ 中,在除了一个源文件之外的所有源文件中声明一个显式特化,它已被完全定义,可以节省编译时间。

    • 6
  2. kryksyh
    2020-03-13T21:26:01Z2020-03-13T21:26:01Z

    extern最常见的用途是在不同程序模块之间隐式共享共享数据。在处理设计不佳的库时经常使用。创建一个全局变量并将其与 extern 挂钩比编写多个访问器更容易。

    它唯一的优点是没有额外的时间花费在数据交换上,因为每个模块的数据总是在手边,并且不需要同步(仅在单线程模式下)。在现代现实中,extern 的使用只能在微控制器的软件中使用,并且只有在速度非常重要的特殊情况下才能使用。

    它的使用会极大地混淆程序的结构并导致意大利面条式代码。最好遵守这条规则:如果你可以不用 extern,那么你就需要不用它。

    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5