Как я пишу короткий литерал в C++?

112
задан Kip 22 April 2015 в 21:39
поделиться

3 ответа

((short)2)

Да, это не строго короткий литерал, больше литого интервала, но поведение является тем же, и я думаю, что нет прямого способа сделать его.

Это - то, что я делал, потому что я ничего не мог найти об этом. Я предположил бы, что компилятор будет достаточно умен для компиляции этого, как будто это - короткий литерал (т.е. это на самом деле не выделило бы интервал и затем бросило бы его каждый раз).

следующее иллюстрирует, сколько необходимо взволновать по поводу этого:

a = 2L;
b = 2.0;
c = (short)2;
d = '\2';

Компиляция-> демонтируют->

movl    $2, _a
movl    $2, _b
movl    $2, _c
movl    $2, _d
81
ответ дан Jonathan Leffler 24 November 2019 в 02:51
поделиться

Даже писатели стандарта C99 ловились этим. Это - отрывок от общественного достояния Danny Smith stdint.h реализация:

/* 7.18.4.1  Macros for minimum-width integer constants

    Accoding to Douglas Gwyn <gwyn@arl.mil>:
    "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
    9899:1999 as initially published, the expansion was required
    to be an integer constant of precisely matching type, which
    is impossible to accomplish for the shorter types on most
    platforms, because C99 provides no standard way to designate
    an integer constant with width less than that of type int.
    TC1 changed this to require just an integer constant
    *expression* with *promoted* type."
*/
28
ответ дан Michael Burr 24 November 2019 в 02:51
поделиться

Насколько я знаю, Вы не делаете, нет такого суффикса. Большинство компиляторов предупредит, если целочисленный литерал будет слишком большим для вписываний безотносительно переменной, Вы пытаетесь сохранить его в, все же.

7
ответ дан unwind 24 November 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: