c++ - 当您在检索到的值的表达式上进行分支时,是否有像 `if (Value * value = getValue())` 这样的习语?

标签 c++ qt qstring

我经常用普通的

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/

相关文章:

c++ - 处理程序抛出异常后是否需要重置 asio::io_service ?

c++ - 仅使用一个#include-expression 一次包含多个头文件?

python - 在 Qscintilla/PyQt4 中使用 SCI_SEARCHINTARGET

c++ - 逐行读取 QString 的最佳方法

c++ - "Incorrect string value"用于波兰语字符(QSqlTableModel、MySQL)

c++ - 最快的最小生成树算法

c++ - 如何让 Visual Studio 2010 警告未使用的变量?

c++ - 使 QML 项/控件接受事件,从而不将它们转发给父级

c++ - Qwt 绘图自动缩放不工作

qt - 将 QString Unix 纪元时间转换为 QString 标准时间