最近在写和指针有关的代码,发现需要很多判空的操作,又不想用成员指针,于是就写了这个东西。但不知道会不会 RE 或者出现 UB,就来问一下。
我没有在 cppreference.com 上找到相关的介绍,百度的资料也很少。
#include <cstdio>
struct S {
int num;
};
S a;
template <typename val_T>
val_T func(S *obj, const val_T * valp, const val_T &saferet) {
if (obj) {
return *valp;
} else {
return saferet;
}
}
int main() {
a.num = 1;
S *ptr1 = &a;
int num1 = func(ptr1, &ptr1 -> num, 2);
S *ptr2 = NULL;
int num2 = func(ptr2, &ptr2 -> num, 3);
printf("%d %d\n", num1, num2);
return 0;
}