据我所知,关键字static (对于C++ )在函数调用中意味着static变量在第一次遇到时被初始化为。
我在Objective成员函数中使用了static关键字,静态变量似乎是立即初始化的(使用非编译时常量subscriber)。Note,我正在用目标-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 },
};在上面的例子中,由于我在initSubscriber之前调用relayMessages,所以我希望subscriber成员变量指针等于PTR,而不是NULL,因为zmq_pollitem_t行还没有被调用。然而,它是NULL。
在不同版本的static中,C++的行为是否发生了变化?比较目标C中的行为是如何定义的呢?
发布于 2018-01-26 11:50:22
不,C没变。您所期望的是C++的工作方式。
C
储存持续时间 ..。
C++
静态局部变量 使用说明符
static在块作用域中声明的变量具有静态存储持续时间,但在控件第一次通过其声明时初始化(除非它们的初始化为零或常量初始化,这可以在第一次输入块之前执行)。在所有进一步的调用中,将跳过声明。
目标-C++ (.mm)
.mm是目标- C++,所以C++应该应用.但话虽如此,还没有正式的语言规范。因此,要确保在.cpp文件中移动,并且只在.mm中保留一些接口代码。例如,还不清楚线程安全的本地静态工作(一次目标-C++?)是否/如何。
另外,您可能需要阅读Apple关于Objective++的文档(遗憾地删除了,但存档了)。 -- 道奇
Clang为所有C语言族[5][6]提供了一个通用的统一解析器,它看起来像激活了单个特性,具体取决于文件类型/扩展名和语言标准支持[7]。
目标-c++
https://stackoverflow.com/questions/48460488
复制相似问题