2011-08-17 8 views
2

私は私には少し珍しい見えることここには何が宣言されていますか?

IField const* f(0); 

...(ブラックコーヒーの私のカップは、「キック」へのチャンスを持っていた前に)早く今朝いくつかのコードでは、この奇妙な宣言に出くわしました。変数fは誰でも説明できますか?

答えて

5

これは、0に初期化されるIField const(またはconst IField)型のポインタ 'f'です。例: const IField * f = 0;

+0

ああ、はい...今私は光を見ます。最初は関数呼び出しのように見えました。さて、私は今それを得る。 – oompahloompah

0

const IField *と同じです。 (アスタリスクの後に "const"があった場合は、constポインタではなくconstへのポインタになります)

0

これはIField *によって参照されるconstオブジェクトへのポインタです。

const IField* f(0); 
4

NULL値で初期化定数IField内のオブジェクトに対して非constポインタと同じ 。

2

これは単なる通常のオブジェクト宣言です。

右から左にタイプを読み取る:
コストは常に左にバインドされます。

IField const*    f(0); 
      ^Pointer to 
     ^^^^^ const 
^^^^^^  IField. 

だから0に初期値を設定する値初期化を使用して、変数「F」は「ポインタを 『CONST IField内』」の一種です。

それと同等である:これは基本的に 'F' はポインタであることを意味

IField const* f = 0; 

又は

IField const* f = NULL; 

。それはIFieldを指します。ポインタが指しているオブジェクトはポインタで変更することはできません。しかし、 'f'はconstではないので、異なるオブジェクトを指すように 'f'の値を変更できますが、最初はNULLポインタです。

IField const* f = NULL; 

次へ関与しているリテラルNULLポインタは、これは同様であることを

IField const* f = 0; 

2
IField const* f(0); 

それはコンストラクタスタイルの初期化構文を使用し、そしてすることと等価です何かある場合はconstが残っていると考えてください。そうでない場合は、これも同じです:

const IField* f = NULL; 

これはあなたがよく慣れ親しんだ構文ですか?

関連する問題