gpt4 book ai didi

c++ - 如何声明一个 C++ 变量应该被改变

转载 作者:行者123 更新时间:2023-11-27 22:34:40 25 4
gpt4 key购买 nike

最近,我遇到了一个错误,我们更改了函数

void update_waypoint_heading(const double new_observation, waypoint)
{
// ....
waypoint.heading = default_heading_deg * waypoint.some_magic_number
}


// Call the function and the function will calculate new heading and mutate heading in waypoint
update_waypoint_heading(new_observation, waypoint);

double update_waypoint_heading(const double new_observation, waypoint)
{
// ....
return default_heading_deg * waypoint.some_magic_number
}

// Here the caller is supposed to be responsible for mutation
waypoint.heading = update_waypoint_heading(new_observation, waypoint);

我们有一个错误,我们更改了函数但没有更改调用者。所以我们结束了

update_waypoint_heading(new_observation, waypoint);

update_waypoint_heading 开始返回新航向的位置。但它从来没有设置到航路点。这对编译器来说也是完全合法的。

是否可以将参数声明为 mutant(与 const 相反),如果它没有发生变异,它将抛出编译器错误。这样我就可以在编译时捕获这些情况

最佳答案

不,它也没有多大意义。

您将一个参数传递给一个函数,并且想要一个关键字来强制调用范围然后将该函数的结果分配给您作为参数传递的同一事物的某些部分?

这很复杂。

如果一个函数返回一个应该使用的结果,那么它的返回类型就会记录下来。如果它修改了它的引用参数,那么也应该记录下来。在您已经获得使用该功能的代码后,不要从一个切换到另一个!

但是!nodiscard attribute这将防止调用函数的结果被简单地丢弃。那会有 flagged this case up ,可能正是您真正需要的。

您需要一个不错的 C++17 编译器才能使用它。

不过,我仍然认为这有点漏洞。决定调用范围对其结果执行的操作不由您的函数决定。只是不要改变函数语义!如果需要,请使用新名称编写一个新函数。无论如何,“更新”不再是一个很好的描述性名称。

关于c++ - 如何声明一个 C++ 变量应该被改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56296384/

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