c++ - C++ 中的静态变量-vs- Objective-C

标签 c++ objective-c static

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

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

- (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 },
};

在上面的示例中,由于我在 relayMessages 之前调用了 initSubscriber,因此我希望 subscriber 成员变量指针等于 PTR ,而不是 NULL,因为尚未调用 zmq_pollitem_t 行。然而,它是 NULL

static 的行为在不同版本的 C++ 中是否发生了变化?并且,相比之下,Objective-C 中定义的行为如何?

最佳答案

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

C

en.cppreference.com/w/c/language/storage_duration

Storage duration

[...]

  • automatic storage duration. [...]

  • static storage duration. The storage duration is the entire execution of the program, and the value stored in the object is initialized only once, prior to main function. All objects declared static and all objects with either internal or external linkage that aren't declared _Thread_local (since C11) have this storage duration.

C++

en.cppreference.com/w/cpp/language/storage_duration

Static local variables

Variables declared at block scope with the specifier static have static storage duration but are initialized the first time control passes through their declaration (unless their initialization is zero- or constant-initialization, which can be performed before the block is first entered). On all further calls, the declaration is skipped.

Objective-C++ (.mm)

.mm 是 Objective-C++,所以 C++ 应该适用。但这就是说没有官方的语言规范。因此,请务必移入 .cpp 文件并在 .mm 中仅保留一些接口(interface)代码。例如,不清楚线程安全的本地静态是否/如何工作 ( Is it possible to remove dispatch_once in Objective-C++? )。

What is Objective C++?

Also, you might want to read Apple's (sadly deleted, but archived) documentation on Objective-C++.

-- doches

Clang 有一个适用于所有 C 语言家族的通用统一解析器[ 5 ][ 6 ] 并且根据文件类型/扩展名和语言标准支持似乎激活了单个功能[ 7 ].

关于c++ - C++ 中的静态变量-vs- Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460488/

相关文章:

c++ - MFC:如何更改整个编辑框的背景颜色?

c++ - 如何在 C++ 中安全地销毁 Posix 线程池

ios - session 打开时 Facebook 好友请求返回 0 个好友

php - 使用 AfNetworking 2 将数据发布到 PHP 时,带有 NSArray 的 NSDictionary 正在转换为元素数组

java - 静态和非静态同步,为什么输出结果不同?

c# - 静态构造函数和继承

c++ - 将图拆分为循环,然后拆分为路径

iphone - scheduledTimerWithTimeInterval vs performselector with delay with iOS 5.0

c++ - 如何构造对象 vector (具有静态成员)

C++ 精确计时器 time.h boost::posix_time