我经常用普通的
if (Value * value = getValue())
{
// do something with value
}
else
{
// handle lack of value
}
现在,我也经常这样做
QString error = someFunctionReturningAnErrorString(arg);
if (!error.isEmpty())
{
// handle the error
}
// empty error means: no error
这很好,但我希望 error
变量的范围为 if
-block。有一个很好的成语吗?显然,我可以将整个部分包裹在另一个 block 中。
这显然行不通:
if(QString error = someFunctionReturningAnErrorString(arg), !error.isEmpty())
{
// handle the error
}
// empty error means: no error
不幸的是(但有充分的理由)QString
无法转换为 bool,因此这也不起作用:
if(QString error = someFunctionReturningAnErrorString(arg))
{
// handle the error
}
// empty error means: no error
有什么建议吗?
最佳答案
没有。没有这样的成语,也没有这样的语法!
此外,您已经到了不再值得让您的代码越来越模糊的地步。
像现在这样写就行了。
如果您真的不希望范围泄漏,请引入一个新范围:
{
const QString error = someFunctionReturningAnErrorString(arg);
if (!error.isEmpty()) {
// handle the error
}
}
// The above-declared `error` doesn't exist down here
我经常使用这种模式,尽管我被指责为范围成瘾,所以请随意使用。
关于c++ - 当您在检索到的值的表达式上进行分支时,是否有像 `if (Value * value = getValue())` 这样的习语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30789929/