在Bjarne Stroustrup的书:Tour of C ++中,我找到了以下片段:
void test(){
string input = "aa as; asd ++easdf asdfg";
regex pat {R"(\s+(\w+))"};
for (sregex_iterator p(input.begin(),input.end(),pat); p!=sregex_iterator{}; ++p)
cout << (*p)[1] << '\n';
}
我在理解sregex_iterator{}
做什么时遇到了问题。这是什么声明?构造函数?初始化列表?
答案 0 :(得分:4)
通过调用默认构造函数(使用统一语法)创建类型为std::sregex_iterator
的(临时)对象。从C ++ 14开始,该标准要求所有对ForwardIterator
概念建模的类型都是DefaultConstructible
,并且默认构造的迭代器代表一个过去的迭代器。
来自cppreference:
奇异迭代器(自C ++ 14开始)
值初始化
ForwardIterator
的行为类似于某个未指定的空容器的过去迭代器:它与同一类型的所有值初始化ForwardIterators
相等。
所以完整的p!=sregex_iterator{};
语句检查迭代器p
是否还没用完。
答案 1 :(得分:2)
它使用C ++ 11中引入的Uniform Initialization调用默认构造函数。