std::size_t n = sizeof(long);
Właściwie to nie zapytał, co wydaje się być szczególnie złą praktyką int powyższych. Używanie size_t, kwalifikacja z std namespace, ...
Jak mówi standard C++ (18.1), size_t jest typem zdefiniowanym w nagłówku standardowym. Proponuję upuścić wszelkie myśli i wrażenia na temat możliwego dziedzictwa z języka C. C++ jest oddzielnym i innym językiem i lepiej go traktować jako taki. Ma własną standardową bibliotekę i wszystkie elementy Standardowej Biblioteki C++ są zdefiniowane w standardowej przestrzeni nazw. Jednak możliwe jest korzystanie z elementów C Standard Library w programie C++.
Zastanowiłbym się, jako brudny hack. Standard C++ stwierdza, że zawartość nagłówków jest taka sama lub bazuje na odpowiednich nagłówkach z C Standard Library, ale w wielu przypadkach zastosowano zmiany. Innymi słowy, nie jest to bezpośrednia kopia nagłówków C w nagłówkach C++.
size_t nie jest wbudowanym typem w C++. Jest to typ zdefiniowany w celu określenia, jaki rodzaj typu integralnego jest używany jako typ zwracany przez operator sizeof(), ponieważ rzeczywisty typ zwracanego sizeof() jest zdefiniowany w implementacji, więc standard C++ ujednolica definiując size_t.
będzie (obejmuje bez ) należy spodziewać się następujący program skompilować na wszystkie kompilatory C++?
size_t foo()
{
return sizeof(long);
}
C++ standard mówi (1.4):
Nazwy zdefiniowane w bibliotece mają zakres przestrzeni nazw (7.3). Jednostka tłumaczeniowa języka C++ (2.1) uzyskuje dostęp do tych nazw przez uwzględnienie odpowiedniego standardowego nagłówka biblioteki (16.2).
Wielkość_t jest nazwą zdefiniowaną w ramach przestrzeni nazw standardowej, więc każdy program, który używa tej nazwy, powinien w tym przypadku zawierać odpowiedni nagłówek.
Następnie rozdział 3.7.3 mówi:
Jednakże, odnosząc się do std std :: bad_alloc i std :: size_t jest źle sformułowane, chyba że nazwa została uznana za tym odpowiedni nagłówek.
Biorąc pod uwagę, że program używający size_t, ale bez nagłówka, jest źle sformułowany.
C nie ma przestrzeni nazw. – wnoise
Jest on wbudowany w C++, gdy #nutlude i jest w standardowej przestrzeni nazw. Zobacz moją odpowiedź poniżej. –
To nie jest "inny sposób zadawania tego pytania" - to inne pytanie: główne zwroty int. – fizzer