定义常量并将其作为参数传递会导致"从指针目标类型中丢弃限定符"

Dil*_*han 4 cocoa objective-c

这已在论坛中被多次询问,但我需要澄清这背后的概念.我声明一个const NSString*key = @"SomeConstValue"; 并将其传递给接受NSString指针类型的方法.然而,它导致我的一些警告"从指针目标类型丢弃限定符".这是什么意思?我怎么想创建一个常量并将它传递给这个方法?

dic*_*ciu 5

在您描述的情况下,您正在丢弃"const"限定符(将const NSString*传递给期望NSString*的方法).

NSStrings总是不可变的,因此您可以安全地将常量声明为"NSString*".如果要在为变量赋值时触发编译器警告,请将其声明为"NSString*const".

  • Dilshan:`const NSString*`*与`NSString const*`相同; 也许这就是你的尝试.正确的类型是`NSString*const`; 在指针之后使用`const`关键字,`const`关键字适用于变量(这就是你想要的原因),而不是变量中的指针(这就是为什么编译器认为这很重要,可以隐含地警告它)丢弃). (3认同)
  • 使用"NSString*const".这是Apple用来声明字符串常量的东西.(例如NSView.h:APPKIT_EXTERN NSString*const NSFullScreenModeAllScreens;) (2认同)
  • const NSString*与NSString*const不同.它是指向const NSString的指针和指向NSString的const指针之间的区别. (2认同)