gpt4 book ai didi

c++ - 如果函数值为 null 则返回

转载 作者:行者123 更新时间:2023-11-30 02:33:30 26 4
gpt4 key购买 nike

我正在编写一个练习编译器,lookup_helper(key,current) 返回一个指向某个 Symbol 的指针(如果它在当前范围内找到的话)。for() 循环遍历所有范围并搜索某个符号,直到找到并返回它。否则返回 nullptr。

    Symbol * lookup()
{

//....
//....

//search all scopes
for (int i = Scopes.size(); i > 0; i--)
{
Scope current = Scopes[i - 1];

if (lookup_helper(key, current)) //not good design
return lookup_helper(key, current); //calling second time

}
return nullptr; //not found
}

这段代码不是调用了两次 lookup_helper() 吗?一次在 if() 中,一次在返回中?我有这个问题的解决方案,但我正在寻找一个更优雅的解决方案,它只调用 lookup_helper 一次(而且我不想创建一些变量来存储返回值)。也许我要问的是不可能的,因为我必须跳转到代码的执行以确定 lookup_helper 是否返回 nullptr。

我想象中的优雅:(不是这样工作的)

for (int i = Scopes.size(); i > 0; i--)
{
Scope current = Scopes[i];

return (ifnotnull) lookup_helper(key, current);

}

最佳答案

是的,您的代码调用了 lookup_helper 两次。如果某些编译器知道该函数是“纯”函数(使用 GCC 术语),则它们可能能够消除第二次调用。然而,在 C++ 中,这是最好手动和显式完成的“优化”之一。

至于如何避免第二次调用,通常是通过在尝试分析之前将结果存储在中间变量中来完成

...
Symbol *symbol = lookup_helper(key, current);
if (symbol != nullptr)
return symbol;
....

关于c++ - 如果函数值为 null 则返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35372252/

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