gpt4 book ai didi

c++ - 测试指针是否为 NULL 并比较取消引用的值

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:12 25 4
gpt4 key购买 nike

我想知道是否有 C++ 函数,或者至少有一个约定:

int a = 5, b = 5, *pa = &a, *pb = &b; //These are example values if the if statement were true

if( ( pa == NULL && pb == NULL ) || ( pa != NULL && pb != NULL && *pa == *pb ) ) //Do stuff

我可以通过以下方式稍微改进一下:!( ( pa == NULL ) ^ ( pb == NULL ) ) && ( !pa || *pa == *pb )但似乎应该有一种更简洁的方法来执行此操作。

最佳答案

我可能会写:

if (pa == pb || (pa && pb && *pa == *pb))

您可以使用由实现比较的助手类支持的函数模板来获得 Perl 语法的好处:

template <typename T>
struct Maybe {
T *ptr
explicit Maybe(T *ptr) : ptr(ptr) {}
bool operator==(const Maybe &other) const {
return (ptr == other.ptr) || (ptr && other.ptr && *ptr == *other.ptr);
// or whatever other answer to this question you like
}
bool operator!=(const Maybe &other) const {
return !(*this == other);
}
};

// could make it work for smart pointer types too,
// but this is simple
template <typename T>
Maybe<T> maybe(T *ptr) { return Maybe<T>(ptr); }

if (maybe(pa) == maybe(pb)) ...

显然,只有在很多不同的地方都这样做才值得。要替换 Perl 语法的这种用法,您也可以使用一个函数模板,它接受两个指针并返回结果...

关于c++ - 测试指针是否为 NULL 并比较取消引用的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21460003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com