【发布时间】:2016-12-03 03:35:29
【问题描述】:
我习惯于在表达不应为空的指针时使用__attribute__((nonnull))。
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))可以跨主要编译器移植吗? -
为什么不使用参考或
span? -
@WhiZTiM 它至少可以在 GCC 和 Clang 之间移植。
标签: c++ pointers null attributes cpp-core-guidelines