web-dev-qa-db-ja.com

Objective C const NSString * vs NSString * const

.hファイルのNSString定数を.mで定義しようとしています。という事は承知しています
.hの extern NSString * const variableName;
NSString * const variableName = @"variableValue";はこれを行う方法です。 cチュートリアルを調べると、constが変数定義の前にあることになっていることがわかります。私の質問は、それが.hではextern const NSString * variableName;として、.mではconst NSString * variableName = @"variableValue";として宣言されていない理由です。 「methodNameの引数1を渡す:ポインタターゲットタイプから修飾子を破棄する」というコンパイラの警告が発生するため、これが機能しないことはわかっています。これは何を意味するのでしょうか?

46
dhatch387

それは同じではありません。 const修飾子は、値または値へのポインターに適用できます。


int * const

整数への定数ポインター(変更不可)(その値は変更可能)


const int *

定数整数への変更可能なポインター(その値は変更できません)


だからあなたは想像することができます:

const int * const;
59
Macmade

定数ポインタは定数へのポインタではありません。定数ポインターは、ポインターが定数であることを意味します。例えば。定数ポインタint * const ptr2;は、ptr2が定数のポインタであることを示します。これは、ptr2が別の整数を指すようにすることができないことを意味します。ただし、ptr2が指す整数は変更できます。

一方、定数const int * ptr1;へのポインターは、ptr1が定数整数を指すポインターであることを示します。整数は一定であり、変更できません。ただし、ポインタptr1は、他の整数を指すようにすることができます。

5
Jogi Thakur