Powiedzmy mam następujący struct
:Czy pola bitowe mniejsze niż int powinny być przedmiotem integralnej promocji?
struct A
{
unsigned int a : 1;
unsigned int b : 1;
};
Co mnie interesuje to rodzaj ekspresji a + b
. Podczas gdy technicznie pola bitowe mają "typ" o rozmiarze mniejszym niż int
, prawdopodobnie powinna się odbyć integralna promocja, a następnie wynik to int
, tak jak to się dzieje w gcc i clang.
Ale ponieważ nie jest możliwe wyodrębnienie dokładnego rodzaju samego pola bitowego i zawsze będzie można wywnioskować, że jest to jego "duży" typ (tj. unsigned int
w tym przypadku), czy to prawda, że powinna nastąpić integralna promocja? Ponieważ nie możemy mówić o dokładnych typach i ich rozmiarach dla pól bitowych, z wyjątkiem tego, że są one wyprowadzane jako unsigned int
, w takim przypadku integralna promocja nie powinna mieć miejsca.
(Ponownie moje pytanie wynika z faktu, że MSVC zdarza się myśleć, że unsigned int
jest rodzaj takiej wypowiedzi)
Która wersja studia wizualnego prawdopodobnie ma sens, aby dodać ten tag na wypadek, gdyby inne osoby miały ten sam problem? –
@ShafikYaghmour Jest to najnowszy, ale dodałem go na wszelki wypadek. – Predelnik
Również istotne: [Dlaczego krótki powinien być konwertowany na int przed operacjami arytmetycznymi w C i C++?] (Http://stackoverflow.com/q/24371868/1708801) –