gpt4 book ai didi

C++ std::queue 不想 push()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:19 24 4
gpt4 key购买 nike

这是一个简单的类和简单的测试函数:

#include <queue>
#include <string>

namespace {
using namespace std;
}

class NameStream {
queue<string> stream;

public:
string operator * () { return stream.front(); }
NameStream &operator ++(int) { stream.pop(); return *this; }
NameStream &operator ++() { stream.pop(); return *this; }
NameStream &operator <<(string name) { stream.push(name); }

operator bool() { return !stream.empty(); }
};

inline void nameStreamTest() {
NameStream &stream = *new NameStream;

stream << "hi" << "hey" << "hoy";

while (stream) {
printf("%s\n", (*stream++).c_str());
}
}

它落在

NameStream &operator <<(string name) { stream.push(name); }

在队列的推送过程中,这是我的代码之外的堆栈:

#0  0x000b5079 in std::deque<std::string, std::allocator<std::string> >::push_back at stl_deque.h:1055
#1 0x000b50f2 in std::queue<std::string, std::deque<std::string, std::allocator<std::string> > >::push at stl_queue.h:204
#2 0x000b511c in NameStream::operator<< at NameStream.h:24
#3 0x000b520f in nameStreamTest at NameStream.h:32

在这种情况下,我的经验失败了。我做错了什么?

附言:

NameStream &stream = *new NameStream;

用于清除位置

stream

地址(偏移量?)0x7d (!) 处的对象会导致相同的异常。

最佳答案

在你的函数末尾放置一个 return 语句。

NameStream &operator <<(string name) { stream.push(name); return *this; }

添加:不返回有效的引用/值(在需要时)将导致 UB,这将导致隐藏的崩溃或通常难以调试的不良行为(如您的情况)。因此,如果它生成任何编译器警告,请不要忽略它。

关于C++ std::queue 不想 push(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6094331/

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