Что здесь заявлено? - PullRequest
       2

Что здесь заявлено?

2 голосов
/ 17 августа 2011

Рано утром я натолкнулся на эту странно выглядящую декларацию в каком-то коде (до того, как моя чашка черного кофе успела «подскочить») ...

IField const* f(0);

Это выглядит немного необычно для меня. Кто-нибудь может объяснить, что такое переменная f ?

Ответы [ 6 ]

5 голосов
/ 17 августа 2011

Это указатель 'f' типа IField const (или const IField), который инициализируется равным 0. То же, что, например,: const IField * f = 0;

4 голосов
/ 17 августа 2011

Неконстантный указатель на постоянный объект IField, инициализированный значением NULL.

2 голосов
/ 17 августа 2011
IField const* f(0);

Он использует синтаксис инициализации в стиле конструктора и, таким образом, эквивалентен:

IField const* f = 0;

В том, что задействован литерал нулевого указателя, это похоже на:

IField const* f = NULL;

Далее, учтите, что const применяется влево, если там что-то есть, и вправо в противном случае, так что это тоже самое:

const IField* f = NULL;

Это синтаксис, к которому вы более привыкли?

2 голосов
/ 17 августа 2011

Это просто обычное объявление объекта.

Чтение типов справа налево:
Стоимость всегда привязывается влево.

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

Так что переменная 'f' использует значение-инициализация для установки его начального значения в 0 является типом «Pointer to« const IField ».

Это эквивалент:

IField const* f   = 0;

или

IField const* f   = NULL;

Это в основном означает, что 'f' - указатель.Это указывает на IField.Объект, на который он указывает, не может быть изменен с помощью указателя.Но «f» не является константой, поэтому мы можем изменить значение «f» так, чтобы оно указывало на разные объекты, но изначально это указатель NULL.

0 голосов
/ 17 августа 2011

Указатель на объект const, на который ссылается IField*.То же, что и

const IField*  f(0);
0 голосов
/ 17 августа 2011

Это то же самое, что и const IField *.(Если после звездочки у вас есть «const», это будет указатель на const, а не указатель на const.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...