使用指向const对象的静态指针数组来混淆const正确性

Ed *_*rty 4 c static const const-correctness objective-c

我仍然不确定我是否完全了解这个特殊情况应如何解决.因此,如果我想声明一个不会改变的NSStrings数组,这是正确的吗?

static NSString * const strings[] = {@"String 1", @"String 2", ...};
Run Code Online (Sandbox Code Playgroud)

static必要吗?(它做了什么?)我错过了一个额外的const地方吗?这里有太多的地方了!尔加!我做错了,还是我只是偏执狂?

Mic*_*urr 7

你有什么:

static NSString * const strings[] = {@"String 1", @"String 2", ...};
Run Code Online (Sandbox Code Playgroud)

是一组不可变指针.

你可能想要:

static NSString const *strings[] = {@"String 1", @"String 2", ...};
Run Code Online (Sandbox Code Playgroud)

指向不可变NSString对象的指针数组.

要么

static NSString const * const strings[] = {@"String 1", @"String 2", ...};
Run Code Online (Sandbox Code Playgroud)

一组不可变NSString对象的不可变指针.

"顺时针螺旋规则"是我用它来解读C声明的技术.

static关键字意味着数组的"贮存期"是该程序的整个生命.如果声明在函数中,那么当函数返回时,数组不会消失(尽管范围仍然只适用于该函数).如果声明位于文件范围,则static关键字将使该数组的名称仅在该编译单元内可见(即,源文件).另一个源文件无法通过extern声明访问该数组.

  • 也许更好的措辞是"一个不可变的指针数组","一组不可变指针","一组指向不可变对象的指针",或者哪个最适合. (2认同)