C++17 std::optional error: expected primary-expression before 'auto'
C++17 std::optional error: expected primary-expression before 'auto'
我正在试验 C++17 功能 std::optional
可选的 return 类型是 std::optional<std::pair<int, int>>
。我打电话给
sum_pair
函数在 print_answer
函数中并且想要一个可选的打印。
在 print_answer
函数中,我想检查所需的对是否包含要显示的内容。
就像在给出的例子中:optional-returning factory functions are usable as conditions of while and if
代码如下:here is it live with error
#include <iostream>
#include <vector>
#include <unordered_map>
#include <optional>
typedef std::optional<std::pair<int, int>> returnType;
// following algorithum works fine: just to show,
// how I have used the std::optional
returnType sum_pair(const std::vector<int>& vec, const int sum)
{
std::unordered_map<int, int> compIndexMap;
int index = 0;
for(const int& ele: vec)
{
if(auto check = compIndexMap.find(sum - ele); check != compIndexMap.cend())
return returnType{std::make_pair(check->second, index)};
compIndexMap.emplace(sum - ele, index);
++index;
}
return std::nullopt;
}
// problem is here:
void print_answer(const std::vector<int>& vec, const int sum)
{
// if I uncomment the if-else, everything works
/*if*/(auto Pair = sum_pair(vec, sum) )?
std::cout << "Resulting indexes are: " << Pair->first << " " << Pair->second << std::endl: //;
//else
std::cout << "Nothing found!\n";
}
int main()
{
std::vector<int> vec0{ 1,3,2,8 };
const int sum = 8;
print_answer(vec0, sum);
return 0;
}
当我使用如下格式的if-else
语句时
(condion) ? print something: print something else;
我收到以下两个错误。 (使用 GCC 7.1)
||=== Build: Debug in MyTestProgram (compiler: GNU GCC Compiler) ===|
|25|error: expected primary-expression before 'auto'|
|25|error: expected ')' before 'auto'|
有人可以解释一下,为什么我需要使用 if-else,而不是 "operator ?"?
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++。您可以在 if
子句的开始条件中放置声明。
(auto Pair = sum_pair(vec, sum) )?
std::cout << "Resulting indexes are: " << Pair->first << " " << Pair->second << std::endl
:
std::cout << "Nothing found!\n";
这不是有效的 C++。声明不是表达式。有些地方允许使用表达式,但不允许使用声明。 ?
的左边,三元运算符,就是其中之一。
我正在试验 C++17 功能 std::optional
可选的 return 类型是 std::optional<std::pair<int, int>>
。我打电话给
sum_pair
函数在 print_answer
函数中并且想要一个可选的打印。
在 print_answer
函数中,我想检查所需的对是否包含要显示的内容。
就像在给出的例子中:optional-returning factory functions are usable as conditions of while and if
代码如下:here is it live with error
#include <iostream>
#include <vector>
#include <unordered_map>
#include <optional>
typedef std::optional<std::pair<int, int>> returnType;
// following algorithum works fine: just to show,
// how I have used the std::optional
returnType sum_pair(const std::vector<int>& vec, const int sum)
{
std::unordered_map<int, int> compIndexMap;
int index = 0;
for(const int& ele: vec)
{
if(auto check = compIndexMap.find(sum - ele); check != compIndexMap.cend())
return returnType{std::make_pair(check->second, index)};
compIndexMap.emplace(sum - ele, index);
++index;
}
return std::nullopt;
}
// problem is here:
void print_answer(const std::vector<int>& vec, const int sum)
{
// if I uncomment the if-else, everything works
/*if*/(auto Pair = sum_pair(vec, sum) )?
std::cout << "Resulting indexes are: " << Pair->first << " " << Pair->second << std::endl: //;
//else
std::cout << "Nothing found!\n";
}
int main()
{
std::vector<int> vec0{ 1,3,2,8 };
const int sum = 8;
print_answer(vec0, sum);
return 0;
}
当我使用如下格式的if-else
语句时
(condion) ? print something: print something else;
我收到以下两个错误。 (使用 GCC 7.1)
||=== Build: Debug in MyTestProgram (compiler: GNU GCC Compiler) ===|
|25|error: expected primary-expression before 'auto'|
|25|error: expected ')' before 'auto'|
有人可以解释一下,为什么我需要使用 if-else,而不是 "operator ?"?
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++。您可以在 if
子句的开始条件中放置声明。
(auto Pair = sum_pair(vec, sum) )?
std::cout << "Resulting indexes are: " << Pair->first << " " << Pair->second << std::endl
:
std::cout << "Nothing found!\n";
这不是有效的 C++。声明不是表达式。有些地方允许使用表达式,但不允许使用声明。 ?
的左边,三元运算符,就是其中之一。