C++ C++;17 std::可选错误:在';之前应为主表达式;自动';

C++ C++;17 std::可选错误:在';之前应为主表达式;自动';,c++,if-statement,c++17,stdoptional,C++,If Statement,C++17,Stdoptional,我在试验C++17的特性 可选返回类型为std::optional。我打电话给 sum\u pair函数中的print\u answer函数,需要可选打印 在print\u answer函数中,我想检查所需的对是否包含要显示的内容。 如中给出的示例所示: 代码如下: 我得到以下两个错误。(使用通用条款7.1) 有人能解释一下,为什么我需要使用if-else,而不是使用“操作符?” if(auto Pair = sum_pair(vec, sum) ) std::cout <<

我在试验C++17的特性

可选返回类型为
std::optional
。我打电话给
sum\u pair
函数中的
print\u answer
函数,需要可选打印

print\u answer
函数中,我想检查所需的对是否包含要显示的内容。 如中给出的示例所示:

代码如下:

我得到以下两个错误。(使用通用条款7.1)

有人能解释一下,为什么我需要使用if-else,而不是使用“操作符?”

if(auto Pair = sum_pair(vec, sum) )
    std::cout << "Resulting indexes are: " << Pair->first << " " << Pair->second << std::endl;
else
    std::cout << "Nothing found!\n";

这不是有效的C++。声明不是表达式。有些地方允许使用表达式,但不允许使用声明符。三元运算符

的左侧就是其中之一。

auto anything=something
不是有效的表达式。这是一个声明,声明不是有效的表达式。三元表达式不是if-else语句。@n.m.对不起,我没有理解你的意思。那怎么行?让我再试一次。A.运算符不是if-else语句,也不是后者中可以接受的所有内容在前者中都可以接受。@Malayalam您希望
(int x=17)吗?x+3:x+5要编译吗?
(condion) ? print something: print something else;
||=== Build: Debug in MyTestProgram (compiler: GNU GCC Compiler) ===|
|25|error: expected primary-expression before 'auto'|
|25|error: expected ')' before 'auto'|
if(auto Pair = sum_pair(vec, sum) )
    std::cout << "Resulting indexes are: " << Pair->first << " " << Pair->second << std::endl;
else
    std::cout << "Nothing found!\n";
(auto Pair = sum_pair(vec, sum) )?
    std::cout << "Resulting indexes are: " << Pair->first << " " << Pair->second << std::endl
:
    std::cout << "Nothing found!\n";