在if子句中自动分配
auto assignment in if clause
我有以下代码,它报告"在这里不允许自动"
//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
您的第一个版本:
if((auto ret = GetSettings(InputField)) && ShouldWeDoThis())
在任何C 标准下都不允许使用,因为您无法在表达式中发表声明。
§6.4(来自C 11)选择语句定义了语句的样子:
- 如果(条件)语句
- 如果(条件)语句else语句
定义了进一步的下降条件:
- 表达
- attribute-specifier-seq
opt decl-secifier-seq declarator = initializer-clause - attribute-specifier-seq opt dect-secifier-seq声明符
这使我们能够写
之类的东西if (auto ret = Foo())
然而,在C 17和向前,定义更改(并移至第§9.4):
- 如果constexpr opt (init-statement
opt 条件)语句 - 如果constexpr opt (init-statement
opt 条件)语句else语句
我们现在可以写下:
if (auto ret=Foo(); ret && Bar())
应该对您的目的有用。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 编译器错误"在if语句中分配不兼容的类型"
- 将 if else 语句的最后一个值分配给变量
- if子句中的有条件分配
- 是``if`语句''在modulo之前和分配操作之前的冗余
- 在if-Statement条件下与分配有关的错误
- 在if子句中自动分配
- c++ 在 if 语句中分配引用变量
- 如何预先分配空类对象,然后在if语句的大括号中创建该对象
- PC何时在if块内部分配静态char*
- 制作程序,以便if语句被分配正确的编号
- 语句内分配"if"内存,退出时解除分配
- 在块中分配字符文本"if"
- if 语句 - 在 if 中分配指针 C++