use*_*174 10 c++ if-statement initializer c++17
"if"语句的cppreference页面;
https://en.cppreference.com/w/cpp/language/if
给出以下例子;
除了由init语句(如果初始化语句是一个声明),并通过名称申报条件(如果条件是一个声明)声明的名字都在相同的范围内,这也是两个语句块引用的范围
std::map<int, std::string> m;
if (auto it = m.find(10); it != m.end()) { return it->size(); }
Run Code Online (Sandbox Code Playgroud)
那是一个错字,不是吗?我不会错过这里的任何东西,它应该是;
it->second.size();
Run Code Online (Sandbox Code Playgroud)
要么
it->first;
Run Code Online (Sandbox Code Playgroud)
没有?
是的,这是一个错字.iterator为std::map将间接引用的std::map::value_type,这里value_type是std::pair<const Key, T>.
请参阅std::map::find(来自cppreference)的使用示例:
#include <iostream>
#include <map>
int main()
{
std::map<int,char> example = {{1,'a'},{2,'b'}};
auto search = example.find(2);
if (search != example.end()) {
std::cout << "Found " << search->first << " " << search->second << '\n';
} else {
std::cout << "Not found\n";
}
}
Run Code Online (Sandbox Code Playgroud)
你是对的.给出的代码不会编译.看到这里.编译器错误是:
Run Code Online (Sandbox Code Playgroud)error: 'struct std::pair<const int, std::__cxx11::basic_string<char> >' has no member named 'size'
std::pair没有size会员 但是std::string有它.
所以正确的代码应该是:
if (auto it = m.find(10); it != m.end()) { return it->second.size(); }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
800 次 |
| 最近记录: |