gpt4 book ai didi

c++ - 逗号运算符、return 语句和 nullptr 没有副作用吗?

转载 作者:可可西里 更新时间:2023-11-01 18:27:18 24 4
gpt4 key购买 nike

<分区>

我有以下测试代码:

#include <cstdint>
#include <cassert>

enum class Result : std::uint32_t {SUCCESS = 0, INSUCCESS = 1};

void* func(Result& result)
{
// works great
/*
result = Result::INSUCCESS;
return NULL;
*/

// error: invalid conversion from ‘long int’ to ‘void*’ [-fpermissive]
/*
return result = Result::INSUCCESS, NULL;
*/

// compiles, but <result> is not set???
return result = Result::INSUCCESS, nullptr;
}

void testReturnWithSideEffects()
{
Result result = Result::SUCCESS;
func(result);
assert(result == Result::INSUCCESS);
}

这里有 2 个问题,但我对第二个最感兴趣:

为什么没有设置结果?

编辑:感谢大家确认这一点。我决定使用的解决方法是替换:

return result = Result::INSUCCESS, nullptr;

具有以下内容:

return result = Result::INSUCCESS, (void*)NULL;

补充说明:当然,我的生产场景是使用另一种指针类型(不是 void*),但为了说明目的我进行了简化。

另一个注意事项:从解决方法中,您可以看出该 nullptr 存在可疑之处。我猜测不编译的示例行实际上应该编译,并且这两个问题可能以某种方式相关。

第三个也是最后一个注意事项,对于那些概述了我的代码的“诡计”或“不可读性”的人:可读性在很大程度上是一个主观问题,例如我可以争辩说像这样的速记可以使代码更加结构化实际上可以帮助发现缺陷。

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