【问题标题】:Objective C const NSString * vs NSString * constObjective C const NSString * vs NSString * const
【发布时间】:2011-03-12 21:48:32
【问题描述】:

我正在尝试将 .h 文件中的 NSString 常量定义在我的 .m 中。我知道
extern NSString * const variableName; 在.h 和
NSString * const variableName = @"variableValue"; 是这样做的方法。检查 c 教程我发现 const 应该在变量定义之前。我的问题是为什么它没有在.h 中声明为extern const NSString * variableName;,在.m 中没有声明为const NSString * variableName = @"variableValue";。我知道这不起作用,因为我遇到编译器警告,上面写着“传递 methodName 的参数 1:从指针目标类型中丢弃限定符”。这是什么意思?

【问题讨论】:

    标签: objective-c constants


    【解决方案1】:

    不一样。 const 修饰符可以应用于值或指向值的指针。


    int * const
    

    指向整数的常量指针(不可修改)(其值可以修改)


    const int *
    

    指向常量整数的可修改指针(其值不能修改)


    所以你可以想象:

    const int * const;
    

    【讨论】:

    • 进一步扩展,如果您不处理指针,const intint const 完全相同。 NSStrings 已经是不可变的,所以 const 只需要应用于指针(这可能有点令人困惑,因为 Objective-C 对象总是通过指针访问)。
    • @Macmade 为什么不用 NSString 来解释这一点,因为指针的语法无论如何都不同?
    • 进一步扩展,const int *int const * 是相同的,但 int * const 是不同的。
    • @Wevah: "NSStrings 已经是不可变的" 但是一个 NSString 指针仍然可以指向一个 NSMutableString
    【解决方案2】:

    常量指针不是指向常量的指针。常量指针意味着指针是常量。例如。常量指针int * const ptr2; 表示ptr2 是一个常量指针。这意味着不能使ptr2 指向另一个整数。但是ptr2指向的整数是可以改变的。

    而指向常量const int * ptr1; 的指针表示ptr1 是指向常量整数的指针。整数是常数,不能更改。但是,指针ptr1 可以指向其他整数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多