2015-05-28 2 views
0

Я прочитал this вопрос и очень запутался в том, что я должен делать с моим кодом. Если мое чтение верное, мой код ниже не определен в соответствии с текущим стандартом. Ниже все, что мне нужно, и я действительно не могу найти лучшего способа сделать это. Использование левого сдвига с OR, определенно, не то, что я хочу. Разве это прекрасно, если оставить его таким образом?Является ли считывание массива без знака без целого числа без знака неопределенным и, следовательно, небезопасным?

EDIT: И да, я читаю n после установки значений rbg, а не n.

union Pixel { 
    unsigned char rgb[4]; 
    uint32_t n; 

    Pixel(): 
    n(0) {} 
}; 
+0

делать то, что? Какова ваша цель? –

+0

Ничего плохого. Но если вы получаете доступ к члену, который вы не поместили туда, это UB. – nwp

+1

@LightnessRacesinOrbit Я хочу быть уверенным, что мой код не содержит неопределенного поведения. – xiver77

ответ

2

Это одна из частей C++, где проще проверить, что делает ваш компилятор, чем следовать стандарту. Насколько я знаю, большинство компиляторов все еще делают то, что вы ожидаете (MSVC, GCC, CLANG). Вы думаете что-то эзотерическое?

В следующей ссылке компилятор Sun C++ упоминается как не работает:

http://blog.regehr.org/archives/959