首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ -vs目标C中的静态变量

C++ -vs目标C中的静态变量
EN

Stack Overflow用户
提问于 2018-01-26 11:29:49
回答 1查看 303关注 0票数 1

据我所知,关键字static (对于C++ )在函数调用中意味着static变量在第一次遇到时被初始化为

我在Objective成员函数中使用了static关键字,静态变量似乎是立即初始化的(使用非编译时常量subscriber)。Note,我正在用目标-C的混合文件类型.mm进行编码。

代码语言:javascript
复制
- (id) init
{
    [self initSubsciber];
    [self relayMessages];
}

- (void) initSubscriber
{
    subscriber= PTR;
}

- (void) relayMessages
{
    // Example 2-2 (mspoller.c), 0MQ book pg.43
    // Initialize poll set
    static zmq_pollitem_t items[] = {
        { subscriber, 0, ZMQ_POLLIN, 0 },
};

在上面的例子中,由于我在initSubscriber之前调用relayMessages,所以我希望subscriber成员变量指针等于PTR,而不是NULL,因为zmq_pollitem_t行还没有被调用。然而,它是NULL

在不同版本的static中,C++的行为是否发生了变化?比较目标C中的行为是如何定义的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-26 11:50:22

不,C没变。您所期望的是C++的工作方式。

C

持续时间

储存持续时间 ..。

  • 自动存储持续时间。..。
  • 静态存储持续时间。存储时间是程序的整个执行过程,存储在对象中的值在主函数之前只初始化一次。所有声明为静态的对象和所有未声明为_Thread_local (自C11)的具有内部或外部链接的对象都具有此存储持续时间。

C++

持续时间

静态局部变量 使用说明符static在块作用域中声明的变量具有静态存储持续时间,但在控件第一次通过其声明时初始化(除非它们的初始化为零或常量初始化,这可以在第一次输入块之前执行)。在所有进一步的调用中,将跳过声明。

目标-C++ (.mm)

.mm是目标- C++,所以C++应该应用.但话虽如此,还没有正式的语言规范。因此,要确保在.cpp文件中移动,并且只在.mm中保留一些接口代码。例如,还不清楚线程安全的本地静态工作(一次目标-C++?)是否/如何。

什么是客观C++?

另外,您可能需要阅读Apple关于Objective++的文档(遗憾地删除了,但存档了)。 -- 道奇

Clang为所有C语言族[5][6]提供了一个通用的统一解析器,它看起来像激活了单个特性,具体取决于文件类型/扩展名和语言标准支持[7]。

目标-c++

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48460488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档