Ustaw wszystkie bajty liczby int na (znak bez znaku) 0, na pewno reprezentuje zero?

To nie jest kwestia zalecana praktyka (ani nieokreślone zachowanie), ale o tym, coc ++ -standard faktycznie gwarantuje w kwestii zamiany wszystkich bajtów typu liczby całkowitej na wartość(unsigned char)0.

Pytania

W poniższym fragmencie znajduje się wyrażenie używane przez if-statement gwarantuje ocenę doprawdziw w c ++ 11?

std::memset (
  reinterpret_cast<char*> (&a), // int a;
  (unsigned char)0,
  sizeof (int)
);

if (a == 0) {
  ...
}

Po przeczytaniu cytatów ze standardu C99 i C ++ 11 (w dalszej części tego postu) stwierdzamy, że C99 wyraźnie gwarancje że jest liczbą całkowitą ze wszystkimi bitami ustawionymi na0 będzie reprezentować wartość0 w tym typie.

Nie mogę znaleźć tej gwarancji w standardzie C ++ 11.

Czy nie ma takiej gwarancji?Czy wynik poprzedniego fragmentu jest naprawdę specyficzny dla implementacji?In C99 (ISO / IEC 9899: 1999) 5.2.1.2 / 1 Znaki wielobajtowe

Bajt ze wszystkimi bitami zero należy interpretować jako znak zerowy niezależny od stanu przesunięcia. Taki bajt nie może występować jako część innego wielobajtowego znaku.

6.2.6.2 / 1 Typy liczb całkowitych

Wartości dowolnych bitów dopełniających nie są określone. 45) Prawidłowa (niepułapkowa) reprezentacja obiektu typu liczby całkowitej ze znakiem, gdzie bit znaku wynosi zero, jest prawidłową reprezentacją obiektu odpowiedniego typu bez znaku i powinna reprezentować tę samą wartoś

Dla dowolnego typu liczby całkowitej reprezentacja obiektu, w której wszystkie bity są zerowe, będzie reprezentacją wartości zero w tym typie.

In C ++ 11 (ISO / IEC 14882: 2011) 2.3 / 3 Zestawy znaków [lex.charset]

Podstawowy zestaw znaków wykonania i podstawowy zestaw znaków szerokiego wykonania zawierają wszystkie elementy podstawowego źródłowego zestawu znaków, a także znaki sterujące reprezentujące alert, cofanie i powrót karetki oraz znak zerowy (odpowiednio null szeroki znak), którego reprezentacja ma wszystkie bity zerowe.

questionAnswers(4)

yourAnswerToTheQuestion