gpt4 book ai didi

c++ - 将通过指针赋值并使用 || 返回成功代码的函数链接在一起是否安全?运算符(operator)?

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

当处理具有如下签名的函数时:

bool getValue(int parameter, int *out)

他们将结果写入由*out寻址的内存并返回一个 bool 值来指示函数是否成功,我正在考虑使用以下模式将其中几个函数按顺序链接在一起优先级:

int result = 0;
bool success = getValue(param1, &result) || getValue(param2, &result) ||
getAnotherValue(param3, &result);

if (success) {
// do something with result
} else {
// handle error
}

我认为这将是一个更简洁、更漂亮的版本:

int result = 0;
bool success = getValue(param1, &result);

if (!success) {
success = getValue(param2, &result);

if (!success) {
success = getAnotherValue(param3, &result);
}
}

if (success) {
// do something with result
} else {
// handle error
}

据我了解,如果任何一个函数成功,则 || 运算符将短路,其余函数将不会被调用,将所需的输出留在 result.

这是一个安全的使用模式,特别是在跨平台并且将使用不同编译器(例如 clang、gcc 和 msvc)编译的代码中?

最佳答案

如果您要问的话,第二段代码肯定与第一段代码等效。

短路意味着未重载的 || 右侧的“未使用”表达式不会被求值,这意味着函数不会被调用,这意味着 &result 不再被触及。

任何不遵守这些语义的编译器不仅公然不符合 C++ 标准,而且是闻所未闻的。

但是,重载的||情况并非如此。因此,我们建议不要做任何事情。

关于c++ - 将通过指针赋值并使用 || 返回成功代码的函数链接在一起是否安全?运算符(operator)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61529459/

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