【发布时间】:2021-06-15 21:52:40
【问题描述】:
您好,我正在尝试更好地理解标准字符串类的工作原理,因此编写了一个非常简单的自定义字符串类。以下是我班的成员:
class String {
public:
String() : first_elem(nullptr), first_free(nullptr), cap(nullptr) { }
String(const String&);//copy constructor
String(std::initializer_list<char>);
void push_back(const char &ch){
check_and_allocate();
alloc.construct(last_elem++,ch);
};
void pop_back();
};
我还有更多的成员函数,并且该类工作正常,但现在我正在尝试实现一个 read() 函数,它将从控制台读取数据(字符)到 String 对象。这是我迄今为止尝试过的:
std::istream& read(std::istream &is, String& obj){
char ch;
while(is >> ch and ch!='\n'){
obj.push_back(ch);
}
return is;
}
我还有一个成员函数,可以根据对象是否已满动态检查和分配,并使用 std::move 重新分配。但我不认为我的read() 功能有效。这是一个朋友功能。此外,当我在控制台上键入内容并点击进入时,程序正在运行但不正确,while 循环不会中断。我怎样才能获得想要的结果。 String 类具有 char 类型的元素。如何从控制台读取字符直到文件结束或用户按回车键,然后将它们(使用 push_back())添加到 String 对象?我将 main.cpp 文件中的 read() 函数调用为 read(std::cin, mystringobject);
上面的截图显示了使用std::cout<<ch<<std::endl;在控制台上打印的内容
知道为什么要打印这个吗?
【问题讨论】:
-
我不认为
void push_back();会有用。 -
它的
void push_back(const char &ch);。 -
检查
>>的优先顺序。 -
@JDługosz
>>的优先级高于 && 两者都具有左关联性。你能澄清一下这里发生了什么,为什么这些盒子和那些是什么!?谢谢 -
我并没有去查看它是否真的错了;这只是需要注意的事情——
&&术语中使用了不寻常的运算符。