Литеральное поле против постоянной переменной в C ++ / CLI - PullRequest
5 голосов
/ 08 марта 2011

Я перебираю некоторый материал C ++ / CLI и натолкнулся на концепцию буквального поля:

literal int inchesPerFoot = 12;

Является ли это предпочтительнее const, потому что const FIELD не может существовать, потому что поле не может инициализировать себя ... так:

class aClass
{
    private:
        const int aConstant = 1;    // Syntax error.
...
};

Спасибо,

Скотт

1 Ответ

17 голосов
/ 09 марта 2011

Литеральное поле используется для констант времени компиляции.Он связан с классом (аналогично полю "static const").В вашем примере aConstant - это нестатическое поле const (на основе экземпляра) - поэтому вы не можете инициализировать его во время объявления (оно будет инициализировано в списке инициализации ctor).

Разница между литеральными и статическими константными полями состоит в том, что ссылающиеся сборки не могут использовать статические константные поля в качестве констант времени компиляции, в то время как литералы могут.Однако в той же сборке статические константы могут использоваться в качестве констант времени компиляции.

FYI, литерал эквивалентен константе C #.initonly эквивалентно C # только для чтения.

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