Я привык использовать __attribute__((nonnull))
при выражении указателей, которые не должны быть пустыми.Когда я использую «__attribute __ ((nonnull))« vs »not_null <T*>«?
void f(int* ptr __attribute__((nonnull)));
int main(){
int* ptr = new int(1);
f(ptr);
}
void f(int* ptr){/*impl*/}
Однако, с GSL, есть также тип not_null<T*>
обертки.
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*/}
Предполагая, что языковые объекты там, чтобы поддержать версию GSL, я должен всегда использовать not_null<T*>
вместо __attribute__((nonnull))
сейчас?
У меня создалось впечатление, что атрибут компилятора может помочь в оптимизации, но версия-оболочка разрешается до непринятого указателя.
Один вопрос: '' __attribute __ ((nonnull)) «переносится через основные компиляторы? – WhiZTiM
Почему бы не использовать ссылку или 'span'? – Jarod42