C ++带有初始化程序的新if语句

时间:2019-01-04 10:50:44

标签: c++ if-statement c++17 initializer

“ if”语句的cppreference页面;

https://en.cppreference.com/w/cpp/language/if

给出以下示例;

  

除了由init-statement声明的名称(如果init-statement是一个声明)和由condition声明的名称(如果condition是一个声明)在同一范围内,这也是这两个语句的范围   引用

std::map<int, std::string> m;
if (auto it = m.find(10); it != m.end()) { return it->size(); }

那是一个错字,不是吗?我应该在这里什么都不会错过;

it->second.size(); 

it->first;

不?

2 个答案:

答案 0 :(得分:8)

是的,这是一个错字。 $REV的{​​{1}}将被取消引用为iterator,其中std::mapstd::map::value_type

请参见std::map::find的用法示例(来自cppreference):

value_type

答案 1 :(得分:6)

您是正确的。给出的代码无法编译。参见here。 编译器错误是:

grid.dataSource.add({ Name: "John Doe" });

error: 'struct std::pair<const int, std::__cxx11::basic_string<char> >' has no member named 'size' 没有std::pair成员。但是size拥有它。

因此正确的代码应为:

std::string