- Jaka jest różnica między tymi, którzy używają macierzy [0] i * tablicy?
- Dlaczego powinien być preferowany?
- Czy różnią się w C++?
(1) Bez różnicy w C. Bez różnicy dla rzeczywistej surowej tablicy w C++.
(2) Brak podstaw technicznych do preferowania jednego lub drugiego, ale nowicjusze mogą zostać zdezorientowani przez dereferencję wskaźnika.
(3) W C++ normalnie nie używałbyś makra, ponieważ jest bardzo niebezpieczny. Jeśli przekazujesz wskaźnik zamiast rzeczywistej surowej tablicy, kod zostanie skompilowany, ale wygeneruje niepoprawny wynik. W C++ powinieneś/powinnaś użyć szablonu funkcji, np. & Hellip;
#include <stddef.h>
typedef ptrdiff_t Size;
template< class Type, Size n >
Size countOf(Type (&)[n]) { return n; }
Przyjmuje tylko rzeczywistą surową tablicę jako argument.
To część triady funkcji startOf
, endOf
i countOf
, że jest to bardzo wygodne, aby zdefiniować tak, że mogą być stosowane zarówno do surowych tablic i standardowych kontenerach biblioteki. O ile mi wiadomo ta triada została po raz pierwszy zidentyfikowana przez Dietmara Kuehla. W C++ 0x startOf
i endOf
będą najprawdopodobniej dostępne jako std::begin
i std::end
.
Pozdrawiam & hth.,
To jest niesamowicie tajemnicze, aby chronić się przed niewłaściwym użyciem w C++, biorąc pod uwagę, że coś innego powinno być używane w C++. –
Masz rację, że nie powinno to być używane w C++, ale bit zapewniający pewne bezpieczeństwo specjalnie dla C++ nie jest zbyt tajemniczy (jest to po prostu nietypowy indeks). Naprawdę tajemnicza część chroni przed niektórymi rodzajami niewłaściwego użycia w C, z których naprawdę trudno jest się wystrzegać (a makro nawet nie doskonale chroni przed tym niewłaściwym użyciem). Niewłaściwe użycie przeciwko (przekazywanie wskaźnika zamiast argumentu tablicowego) występuje często na tyle, że opłaca się mieć złożoność. Zawinięty w makro, złożoność nie jest zbyt dużym problemem (a to makro jest mniej tajemnicze niż wiele z nich spotykam). –
Co to jest "0 [x]"? Możesz to zrobić? –