Moc*_*han 3 c++ short-circuiting
我希望能够在if块中进行多个分配,如果第一个失败则将其短路。但是,这不会编译并表示,expected primary-expression before ‘auto’
#include <iostream>
#include <optional>
std::optional<int> foo()
{
return 0;
}
int main() {
if (auto a = foo() && auto b = foo())
{
std::cout << "a = " << *a << ", b = " << *b << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
下面的作品,虽然和我想要的。
if (auto a = foo())
{
if (auto b = foo()) {
std::cout << "a = " << *a << ", b = " << *b << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我有办法在第一个语法中使用语法吗?使用括号将表达式括起来不起作用。
从C ++ 17开始,您可以编写
if (decltype(foo()) a, b; (a = foo()) && (b = foo()))
{
std::cout << "a = " << *a << ", b = " << *b << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您想了解短路的作用,则应更改条件:
#include <iostream>
#include <optional>
std::optional<int> foo()
{
std::cout << "foo called.\n";
return 1;
}
int main()
{
if (decltype(foo()) a, b; (a = foo()) or (b = foo()))
{
// For exposition only ^^
std::cout << "a = " << *a << ", b = " << *b << std::endl;
// Note that, now, this is UB ^^
}
}
Run Code Online (Sandbox Code Playgroud)
比较器的输出这
foo叫。 a = 1,b = 0
与前者相比。
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |