【发布时间】:2018-05-29 03:56:46
【问题描述】:
我有下面的代码,它报告“这里不允许自动”
//GeSettings() returns boost::optional<ValueType> and could be empty
if((auto ret = GetSettings(InputField)) && ShouldWeDoThis())
{
do something with ret;
}
但如果没问题,请按以下方式更改。
if(auto ret = GetSettings(InputField))
{
if(ShouldWeDoThis())
{
do something with ret;
}
}
背后的原因可能是愚蠢的购买,请问为什么?我正在使用 Visual Studio 2017
【问题讨论】:
-
如果您使用的是 Visual Studio 2017,您是否使用新的 C++17 功能?还是您仅限于 C++14?
-
@DeiDei 好点,其实还是2013的编译器,推送升级到2017
-
C++17 允许
if (auto ret = GetSettings(InputField); ret && ShouldWeDoThis())。 -
一旦你有了它,处理这个问题的惯用方法是使用
if (auto ret = GetSettings(InputField); ret && ShouldWeDoThis()) { do something with ret; }。这种初始化在if和switch中是允许的,类似于for循环的初始化部分。请注意ret的值不一定在if语句中检查;你仍然需要自己做。