我在下面有代码并报告"此处不允许自动"
//GeSettings() returns boost::optional<ValueType> and could be empty
if((auto ret = GetSettings(InputField)) && ShouldWeDoThis())
{
do something with ret;
}
Run Code Online (Sandbox Code Playgroud)
但如果罚款就改变如下.
if(auto ret = GetSettings(InputField))
{
if(ShouldWeDoThis())
{
do something with ret;
}
}
Run Code Online (Sandbox Code Playgroud)
背后的原因可能是傻逼我可能会问为什么?我正在使用Visual Studio 2017
您的第一个版本:
\n\nif((auto ret = GetSettings(InputField)) && ShouldWeDoThis())\nRun Code Online (Sandbox Code Playgroud)\n\n在任何 C++ 标准下都是不允许的,因为表达式中不能有声明。
\n\n\xc2\xa76.4 (来自 c++11) 选择语句定义了 if 语句的样子:
\n\n\n\n\n\n
\n- if(条件)语句
\n- if(条件)语句 else 语句
\n
进一步向下条件定义:
\n\n\n\n\n\n
\n- 表达
\n- 属性说明符-seq opt decl-说明符-seq 声明符 = 初始化子句
\n- 属性说明符-seq opt decl-说明符-seq 声明符花括号初始化列表
\n
这使我们可以写类似的东西
\n\nif (auto ret = Foo())\nRun Code Online (Sandbox Code Playgroud)\n\n然而,在 c++17 及更高版本中,定义发生了变化(并移至 \xc2\xa79.4):
\n\n\n\n\n\n
\n- if constexpr opt (init-statement opt条件) 语句
\n- if constexpr opt (init-statement opt条件) 语句 else 语句
\n
我们现在可以写这样的东西:
\n\nif (auto ret=Foo(); ret && Bar())\nRun Code Online (Sandbox Code Playgroud)\n\n这应该对您的目的有用。
\n| 归档时间: |
|
| 查看次数: |
1500 次 |
| 最近记录: |