gpt4 book ai didi

C++: "illogical"析构函数行为

转载 作者:行者123 更新时间:2023-11-30 01:46:28 24 4
gpt4 key购买 nike

我只想用 for_each 打印一个 vector 。

using namespace std;
struct Print {
int z = 0;
void operator()(int i) {
if (z) cout << ' ';
cout << i;
z = 1;
}
~Print() {
if (z) cout << endl;
}
};
main() {
vector<int> v = {1, 2, 3, 4, 5};
for_each(begin(v), end(v), Print());
}

它工作不正常,它调用析构函数两次并打印两个换行符而不是一个。为什么?谁能解释这种奇怪行为的逻辑?顺便说一句,它适用于丑陋的全局变量。

int z;
struct Print {
void operator()(int i) {
. . .
};

我正在使用 GCC。

最佳答案

这不是“错误”。您忘记了谓词被复制,至少一次。实际上,谓词被多次复制是合法的。你的类(class)应该考虑到这一点;并且通过使其成员static(这会中断后续调用)。 std::for_each 并不是真正适合这项工作的工具。

关于C++: "illogical"析构函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33201475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com