gpt4 book ai didi

c++ - 在非空函数中,我不希望返回任何内容

转载 作者:行者123 更新时间:2023-12-03 08:09:00 25 4
gpt4 key购买 nike

我有一个返回指针的函数。在此功能中,我要检查条件。如果满足此条件,我想返回指针。但是,如果不满足条件,我要打印错误日志,不返回任何内容。在这种情况下我该怎么办?如果不满足条件,我不会退货,但会收到警告。谢谢

最佳答案

However, if the condition is not satisfied I want to print an error log and do not return anything.


好吧,除非您想退出程序或抛出异常或类似的东西,否则这实际上是不可能的。当您具有返回指针的函数时,最常见的解决方法是返回空指针。
解决问题的一种非常糟糕的方法是简单地跳过return语句,如下所示:
int *foo() {
if(<condition>)
return <some pointer>
log(<message>);
// Simply skip the return statement here
}
我强烈建议您这样做,因为它是未定义的行为。而且由于只需要一行就可以避免这种情况,因此只需在最后添加 return nullptr。请注意,由于到达最终的 }是UB,因此编译器可能会将上述函数优化为:
int *foo() {
return <some pointer>
}
是的,它跳过了日志消息和条件。原因是编译器可能认为UB永远不会发生。
另外,“什么也不退”是没有意义的。考虑以下代码:
int *foo() {
// Code
}

int main() {
int *ptr;
ptr = foo();
printf("%p\n", ptr); // What should the output here be?
“不返回任何内容”没有多大意义,因为必须为 ptr分配一些值。我只能想到两种合理的解决方案:
  • ptr没有得到修改
  • ptr获得“无”值

  • 1不可能,因为C++根本不支持。解决方法是这样的,但是它需要将指针传递给函数:
    int *foo(int *ptr) {
    if(<condition>)
    return <some pointer>
    return ptr;
    }
    2是不可能的。 C++没有“none”值。最接近的就是空指针。对于浮点数,可以改用NaN数。但是,没有适用于所有类型的通用“none”。

    关于c++ - 在非空函数中,我不希望返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64517100/

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