不同语言中的静态

2023-12-10

我听说不同语言的关键字含义存在差异static,但我还没有找到一个很好的列表来巩固这些差异。

这是我所知道的含义static in C++:

  • 对于函数内的局部静态变量,变量在启动时初始化,并且值在函数调用期间保存。
  • 静态数据成员在类的所有实例之间共享。换句话说,静态数据成员只有一个实例。静态数据成员必须在文件范围内初始化。
  • 静态成员函数只能访问静态成员。
  • 在递归代码中,保证静态对象或变量在代码块的不同实例中具有相同的状态。
  • 在文件范围内定义的静态对象和变量仅具有内部链接。其他文件不能使用它们。

的含义是怎样的static其他语言的变化?


C


  • 关键字可以更改对象的链接或持续时间(生命周期)。
  • 变量总是初始化为 0
  • 功能具有内部联系。
  • 如果在文件级作用域中声明:变量具有内部链接和静态持续时间(即存在于程序的整个生命周期中)
  • 如果在块作用域中声明:变量没有链接,但有静态持续时间
  • 一个翻译单元中可以有多个相同静态变量的声明。但请注意,它们必须相同。例如:在文件级范围:

int a;        // a has external linkage

static int a; // a now has static linkage
              // same as if you wrote: static int a = 0;

//...

static int b; // static linkage

extern int b; // extern loses its meaning, b still has internal linkage

//...

extern int b; // b has external linkage

static int b; // error

//...

void func() {
  static int x; // automatic linkage, static duration
                // same as if you wrote: static int x = 0;
}

C++


  • 在文件级别范围内,变量和成员的用法已被弃用,取而代之的是匿名名称空间。仅作为兼容性而存在
  • 变量仍然默认初始化(如 C 中)为 0
  • “6.7 具有静态存储持续时间 (3.7.1) 或线程存储持续时间 (3.7.2) 的所有本地对象的零初始化 (8.5) 在任何其他初始化发生之前执行 [...]”
  • 变量具有静态存储持续时间,除非附有thread_local说明符(从 C++0x 开始)
  • 翻译单元中只能有一个 static 定义
  • 成员变量/函数意味着它们是类的属性而不是实例 合法访问语法:instance.property 或 Class::property
  • 静态成员函数只能访问静态成员变量 不this此类函数的指针
  • 然而,非静态成员可以访问任何静态成员
  • 在文件级别,对象具有内部链接,但具有类作用域的类成员除外
  • 类成员需要在类声明中或通过类名和作用域解析运算符在外部显式定义
  • 不能用this在静态方法中

动作脚本


  • 与 C++ 中一样的类方法
  • 不能用this or super在静态方法中
  • 只能通过类名访问,不能通过实例名访问
  • 不遗传
  • 然而,派生类可以访问基类的静态属性
  • 同时使用 static 和 const 关键字声明的变量必须在声明常量的同时进行初始化

面向对象设计


  • Singleton 设计模式被许多人认为是一种美化的静态对象
  • 用于工厂设计模式

我可能错过了很多其他的事情——请随意补充。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不同语言中的静态 的相关文章

  • 匿名命名空间:它们真的那么好吗?

    我一直在使用static关键字时间较长 用于定义内部链接 后来 我改用 C 风格 将本地事物包装在匿名命名空间中 然而 现在当我使用匿名命名空间多年后 我开始认为static关键字更容易使用 一个常见的问题是我有这样的模式 namespac
  • 如何选择30天的数据?

    我有疑问 SELECT name FROM SELECT name FROM Hist answer WHERE id city 34324 AND datetime gt DATE SUB CURRENT DATE INTERVAL 1
  • 俄语编程语言“Rapira”的现代实现? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有俄语 Rapira 编程语言的现代 1990 年以后 实现 维基百科没有提及 这个问题让我回想起
  • 静态局部变量和静态全局变量有什么区别?

    C 入门 说 每个局部静态变量在第一次之前都会被初始化 执行通过对象的定义 本地静态数据是 函数结束时不会被销毁 当程序运行时它们被销毁 终止 局部静态变量与全局静态变量有什么不同吗 除了申报地点不同之外 还有什么不同呢 void foo
  • 编程语言中的协变和逆变有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 谁能解释一下协变和逆变的概念 编程语言理论 协方差非常简单 最好从某个集合类的角度来思考List 我们可以参数化 the List具有
  • 哪些通用编程语言/实现编译为 C [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前正在使用 Eiffel SmartEiffel ISE Eiffel 它正在编译为 c 我发现 如果输出进入可移植汇编语言 也称为
  • 重写 PHP 中的静态方法

    我有一个抽象页面类 如下所示 abstract class Page public static function display self displayHeader self displayContent self displayFoo
  • 在哪里定义与 symfony2 中的实体相关的静态数组?

    我有一个数组包含与实体相关的静态数据Product public static category array 1 gt animal png 2 gt blague png 3 gt devinette png 4 gt enfant pn
  • 什么是 PHP 中的呼叫转移和静态呼叫或后期静态绑定? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我从网站上获得了一个代码示例 但我很难理解输出 我正在分享代码 class A public static function foo
  • 如何创建静态字符串数组?

    Note这个问题包含 Rust 1 0 之前的语法 代码无效 但概念仍然相关 如何在 Rust 中创建全局静态字符串数组 对于整数 编译如下 static ONE u8 1 static TWO u8 2 static ONETWO sta
  • 尝试在类中定义静态常量变量

    我正在定义一个变量adc cmd 9 as a static const unsigned char在我的课堂上ADC私人之下 由于它是一个常量 我想我只需在它自己的类中定义它 但这显然不起作用 pragma once class ADC
  • 可以在 .h 文件中声明静态全局变量吗?

    static 关键字将全局变量的范围限制为该翻译单元 如果我使用static int x在 h 文件中并包含该 h 文件每隔一个文件 它们不会都属于同一个翻译单元吗 那么 x不是到处可见吗 那么现在static有什么作用呢 另外 有没有什么
  • 如何对搜索引擎关键词进行聚类?

    从 Google Analytics 中 我有一个 长 关键字列表 人们在搜索引擎中使用这些关键字来查找我的网站 我想找到 核心关键词 假设的例子 java online training learning java scala train
  • Java 从我创建的另一个类访问数组元素

    我正在使用 main 方法在类中创建一个数组 Word attempts new Word 26 Word 类中的字段是 private String attempts Word 类中的构造函数是 public Word int a att
  • 无法初始化静态QList?

    我收到以下错误 Cube cpp 10 error expected initializer before lt lt token 以下是头文件的重要部分 ifndef CUBE H define CUBE H include
  • Haskell:Where 与 Let

    我是 Haskell 的新手 我很困惑Where vs Let 它们似乎都提供了相似的目的 我读过一些比较Where vs Let但我很难辨别何时使用它们 有人可以提供一些背景信息或者一些示例来说明何时使用其中一种而不是另一种吗 哪里与让
  • for循环中需要声明变量吗?

    有什么区别 for var i 0 i lt 5 i for i 0 i lt 5 i 是否有必要包含 var 关键字 我知道 var 关键字会影响变量范围 但我无法理解是否有必要在 for 循环中包含该关键字 在第二个示例中 您的变量是全
  • __callStatic():从静态上下文实例化对象?

    我对 PHP 中的 静态 和 动态 函数和对象如何协同工作感到困惑 特别是在 callStatic 方面 callStatic 的工作原理 您可以有一个普通的班级 MyClass 在班级内您可以 放置一个名为 callStatic 的静态函
  • 我可以通过在 Android Activity 中声明适当的成员“静态”来提高效率吗

    如果一个 Activity 在实践中是单例 我认为我可以通过声明适当的成员 静态 来获得一些效率 且风险为零 是的 The Android 文档说 http developer android com guide topics fundam
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con

随机推荐

  • 拦截 Firefox Addon SDK 中的新下载

    我为 Windows 编写了一个简单的下载管理器 我想为 Firefox 创建一个插件 启用后会拦截 Firefox 中的新下载并将它们发送到下载管理器 我已经这样做了谷歌浏览器 using chrome downloads onCreat
  • 如何在jsp中显示表格中的值?

    我是 jsp 和 jstl 的新手 我正在编写此代码 以使用 for 循环从数组中获取值 我正在获取输出 但我想将该输出放入表中 有人可以帮助我吗 for int i 0 i lt timeSize i out println resour
  • 在 C# 中检索 RETURN @@IDENTITY 的值

    这是一个非常简单的问题 我有一个 SP 它向表中插入一行 最后有语句 RETURN IDENTITY 我似乎找不到在 C 中检索该值的方法 我正在使用 Enterprise 库并使用以下方法 db ExecuteNonQuery cmd 我
  • 如何在DrawingImage/DrawingContext中绘制不模糊的线?

    看图片 我希望中间的线是一条清晰的 1 像素线 您可以将示例标记复制并粘贴到kaxaml 替代文本 http img832 imageshack us img832 1704 lines png
  • GetDIBits 并使用 X、Y 循环遍历像素

    我抓住屏幕的一部分并扫描像素以获得特定的颜色范围 我在看MSDN 的捕获图像示例并了解如何使用这些功能 我可以将这些位放入数组中 但我不确定如何以可以像处理图像一样循环遍历它的方式进行操作 一个伪示例 我确信这是很遥远的 for x 1 x
  • JTextArea txt; txt.getText() 跳过“\n”

    我在 TextArea 中有一些文本 我想将其保存在文件中 我的代码在这里 private void SaveFile try String content txt getText File file new File filename i
  • Windows Phone 8 中的自定义字体

    我尝试将自定义字体添加到我的应用程序中 我需要它作为页面标题 我将字体复制到名为 Fonts 的文件夹中 并将构建操作更改为内容 在属性面板中 字体显示在字体列表中 但是当我添加字体时 页面标题不会改变 它改变了一点 但不像我使用的字体 奇
  • postgresql中两个日期之间的差异

    功能 CREATE FUNCTION diff d1 date d2 date RETURNS int AS BEGIN IF d1 NULL THEN RETURN SELECT extract year from age current
  • 如何知道 Angular 5 及以上版本的 router-outlet 中加载了哪个组件

    这是我的 ap component html
  • 如何使用 Web::Scraper 从一张表中进行选择?

    我只想从网页中提取标题节点对象方法的文本 具体HMTL部分如下 h2 Node Object Properties h2 p The quot DOM quot column indicates in which DOM Level the
  • 在 C++ 中的字符串之间添加字符

    所以基本上我试图在字符串中间添加一个字符 通常在Python之类的东西中 这会非常简单 但我真的不知道如何在C 中实现这一点 我想要实现的是这样的 void converter converted regional indicator ch
  • 将 .css 文件导入到 .less 文件中

    您可以将 css 文件导入到 less 文件中吗 我对 less 非常熟悉 并将其用于我的所有开发 我经常使用如下结构 import normalize styles here import mixins import media quer
  • 实体框架错误:将 datetime2 数据类型转换为 datetime 数据

    我知道有很多关于这个问题的帖子 但似乎没有一个能解决我的问题 这是场景 我有一个创建日期 DateTime我的 MS SQL Server 数据库中的列User不可为空且自动设置的表获取日期 默认值或绑定 设置中的方法 我可以使用标准 EF
  • Jasper 报告文本字段值中的 IF 条件

    使用文本字段值编辑器 我添加一个带有条件的文本到文本字段 注意 if 是使用 JasperSoft studio 的字段编辑器构建的 因此代码 IF 是自动生成的 我只给出了值 pippo 并且 冥王星 Some value IF true
  • 使用 SelectSingleNode() 方法需要哪个命名空间(使用默认命名空间并且不能使用该方法)

    您好 我有 xml 文件 实际上是 msbuild 文件 它使用不同的命名空间
  • 为 Gradle 子项目配置 Kotlin 扩展

    我正在为 JVM 设置一个基于 Kotlin 的多模块 Gradle 项目 由于根项目不包含任何代码 因此 Kotlin 插件只能应用于子项目 build gradle kts 根项目 plugins kotlin jvm version
  • rvest 中的 html 与 XML 中的 htmlParse

    如下面的代码所示 html in rvest封装用途htmlParse from XML包裹 html function x encoding NULL parse x XML htmlParse encoding encoding
  • SDL_PollEvent 似乎阻止窗口表面更新

    我目前正在浏览 SDL2 的 Lazy Foo 教程 我在 Linux 机器上执行此操作 并且遇到了某种错误 其中包含SDL PollEvent在我的主循环中似乎可以防止SDL UpdateWindowSurface从实际更新来看 如果我离
  • Windows 服务 - 如何使任务在多个特定时间运行?

    我有一个 Windows 服务正在运行 目前该任务在每天晚上 7 点运行 让它运行的最佳方式是什么 例如上午 9 45 上午 11 45 下午 2 点 下午 3 45 下午 5 点和下午 5 45 我知道我可以安排任务来运行该功能 但我想知
  • 不同语言中的静态

    我听说不同语言的关键字含义存在差异static 但我还没有找到一个很好的列表来巩固这些差异 这是我所知道的含义static in C 对于函数内的局部静态变量 变量在启动时初始化 并且值在函数调用期间保存 静态数据成员在类的所有实例之间共享