Ich bin es gewohnt, __attribute__((nonnull))
zu verwenden, wenn ich Zeiger ausspreche, die nicht null sein sollten.Wann verwende ich "__attribute __ ((nichtnull))" vs "not_null <T*>"?
void f(int* ptr __attribute__((nonnull)));
int main(){
int* ptr = new int(1);
f(ptr);
}
void f(int* ptr){/*impl*/}
Doch mit der GSL, gibt es auch den not_null<T*>
Wrapper-Typ.
void function1 (gsl :: not_null n);
void f(gsl::not_null<int*> n);
int main(){
int* ptr = new int(1);
f(ptr);
}
void f(gsl::not_null<int*> n){/*impl*/}
Unter der Annahme, die Sprache Einrichtungen sind dort die GSL-Version zu unterstützen, sollte ich immer jetzt not_null<T*>
anstelle von __attribute__((nonnull))
verwenden?
Ich hatte den Eindruck, dass das Compiler-Attribut Optimierungen unterstützen kann, aber die Wrapper-Version wird in einen nicht zugeordneten Zeiger aufgelöst.
Eine Frage, Is '__attribute __ ((nonnull)) 'portabel über große Compiler? – WhiZTiM
Warum nicht Referenz oder 'span' verwenden? – Jarod42