static_cast dynamic_cast: ожидаемое постоянное выражение? - PullRequest
0 голосов
/ 31 мая 2011

В Visual C ++ 2010 при компиляции следующих кодов я получаю сообщение об ошибке:

static_cast error C2057: ожидаемое константное выражение.

что с этим не так?

struct A {};
struct B : A {};

struct XX
{
    static const int offset = (long)static_cast<A*>((B*)0x8) - 0x8;
};

Спасибо AProgrammer, для VC 2010 верно следующее:

struct A {};
struct B : A {};

struct XX
{
    static const int offset;
};

const int XX::offset
 = (long)static_cast<A const*>((B const*)0x8) - 0x8;

Ответы [ 2 ]

7 голосов
/ 31 мая 2011

Приведения к A * и B * не позволяют инициализатору x быть константным выражением:

5.19 / 3

Операторы приведения в выражении арифметической константы должны преобразовывать толькоарифметические или перечислимые типы для арифметических или перечислимых типов, исключаемые как часть операнда для оператора sizeof.

, который необходим в этом контексте:

9.2 / 4

член-декларатор может содержать константу-инициализатор , только если он объявляет static член целого типа или типа перечисления.

0 голосов
/ 31 мая 2011

Почему бы просто не сказать:

static const int x =0x8;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...