【发布时间】:2021-05-19 12:35:39
【问题描述】:
伙计们,我是 C++ 新手。所以请原谅我在这里的无知。我试图理解我上网的以下代码。 while (next != end) 行到底做了什么?当我打印 &next 和 &end 的地址时,它们总是不同的(甚至发布 while 循环)。我认为std::sregex_iterator next 和std::sregex_iterator end 是两个不同的实例。那么while (next != end) 行怎么会认为它们在某个时间点会相等呢?我看着引擎盖下。好像是regex_iterator<string::const_iterator>。
我试图了解构造函数等,但不想列出我发现的所有内容,因为它们可能不相关。只是为了让您知道我来自 Java 世界,但一直在学习了解 C++ 的课程。
非常感谢任何帮助。谢谢
string subject("This is a test");
try {
std::regex re("\\S+");
std::sregex_iterator next(subject.begin(), subject.end(), re);
std::sregex_iterator end;
while (next != end) {
std::smatch match = *next;
std::cout << match.str() << "\n";
std::cout << match.position() << "\n";
next++;
}
} catch (std::regex_error& e) {
// Syntax error in the regular expression
}
【问题讨论】:
-
=检查相等而不是身份。您可能来自 Java 吗? C++ 使用值语义。你可以有两个比较相等的对象,例如int x = 3; int y = 3;然后x==y是true即使&x != &y -
C++ 中的
==运算符不一定比较地址。next和end是迭代器(可以用来在集合中移动的东西;通常作为指针上的外观实现)。 -
哦,是的 Java ;)。不要试图将你从 java 中学到的知识应用到 C++ 中。尽管看起来语法非常相似,但它们在实际工作方式上几乎没有什么不同
-
@largest_prime_is_463035818 - 是的,所以在某个时间点,next 和 end 的值都将是空值(类似于 null)并且 while 循环将终止?试图打印 next 和 end 的值,但它不喜欢它。我假设像 Java 中的 toString 一样,在 C++ 中有一些运算符或一些重载,完成后将有助于打印值?
-
是的,您的问题有两个方面。我试图在答案中解决这两个问题