草庐IT

basic_istream

全部标签

c++ - 以 std::istream&& 为参数是否合理?

我遇到过这样做的代码:SomeObjectparse(std::istream&&input){....input参数是右值引用,这通常意味着该函数旨在获取参数的所有权。这不是这里发生的事情。parse函数将完全消耗输入流,它需要一个右值引用,因为调用代码将放弃istream的所有权,因此这是一个信号输入流将不可用。我认为这没问题,因为parse函数实际上并没有四处移动对象,因此不存在切出子类型的危险。从parse的角度来看,这基本上表现为一个正常的引用,只是对调用函数有一种可编译的注释,您必须放弃流的所有权。这段代码真的安全吗?还是有一些被忽视的微妙之处导致了这种危险?

c++ - C++ 的 istream::eof() 的不一致是规范中的错误还是实现中的错误?

以下程序演示了std::istream(特别是在我的测试代码中,std::istringstream)设置eof()的方式不一致。#include#includeintmain(intargc,constchar*argv[]){//EXHIBITA:{//Anemptystreamdoesn'trecognizethatit'sempty...std::istringstreamstream("");assert(!stream.eof());//(NotyetEOF.Maybeshouldbe.)//...untilIreadfromit:constintc=stream.get(

c++ - 是否可以在 C++11 中手动设置 istream 失败位

我做了这门课:classobject{//data...public:friendstd::istream&operator>>(std::istream&in,object&o){charc,d;in>>c>>d;if(c==d){/*setthefailbitsomehow*/in.putback(d);in.putback(c);}elseo.set_data(c,d);returnin;}};我正在查看文档(不太好),但找不到设置失败位的正确方法。我关心的原因是我希望能够while(std::cin>>obj)/*dostuff*/;就像一个人可以用int做的那样。但是,如果我

c++ - 带空字符的 STL basic_string 长度

为什么您可以在std::basic_string中插入一个'\0'字符并且.length()方法不受影响,但是如果您调用char_traits::length(str.c_str())你得到字符串的长度直到第一个'\0'字符?例如stringstr("abcdefgh");cout::length(str.c_str());//4 最佳答案 好问题!原因是C风格的字符串被定义为以空字节结尾的字节序列。当您使用.c_str()从C++中获取C风格的字符串std::string,然后您将返回C++字符串存储的序列,其后有一个空字节。当您

c++ - 错误 C2248 : 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'

收到此错误,我很确定它在operatorvoidCRational::print()const{print(cout);}voidCRational::print(ostream&sout)const{if(m_denominator==1)cout 最佳答案 您需要通过引用而不是值返回ostream。它试图调用构造函数。也可以传递'a'作为引用:ostream&operator我还注意到打印方法可能是错误的。它有sout作为流的名称传递,但随后直接使用cout实现。应该是voidCRational::print(ostream&s

c++ - 跳过 std::istream 中的行

我正在使用std::getline()从std::istream派生类中读取行,我怎样才能向前移动几行?我是否必须阅读并丢弃它们? 最佳答案 不,您不必使用getline更有效的方法是使用std::istream::ignore忽略字符串for(intcurrLineNumber=0;currLineNumber::max(),addressesFile.widen('\n'))){//justskippingtheline}elsereturnHandleReadingLineError(addressesFile,currLin

c++ - 我如何从 uint8_t vector 创建一个 istream?

我正在为过去只能读取本地文件的代码添加通过网络获取数据的功能。我正在使用的网络库以vector的形式发送和接收数据.我希望能够在读取文件后重用处理数据的代码,但该代码需要一个std::istream,有没有办法让istream读取vector数据?这是相同的数据,所以我觉得应该有一种方法,但我一直无法找到或弄清楚如何做的代码。当前代码:std::ifstreamstream("data.img",std::ios::in|std::ios::binary|std::ios::ate);if(!stream.is_open()){throwstd::invalid_argument("C

c++ - 我如何找出 std::istream 中有多少字节可用?

如果我想read()一个std::istream的内容到一个缓冲区,我必须先找出有多少数据可用知道缓冲区有多大。为了从istream中获取可用字节数,我目前正在做这样的事情:std::streamsizeavailable(std::istream&is){std::streampospos=is.tellg();is.seekg(0,std::ios::end);std::streamsizelen=is.tellg()-pos;is.seekg(pos);returnlen;}同样,由于std::istream::eof()不是一个非常有用的基金AFAICT,要查明istream的

c++ - 如何将 std::basic_string 类型转换为 char 类型的数组?

运行此代码时出现以下错误:syslog(LOG_ERR|LOG_USER,"%s",errorString);cannotconvert‘conststring{akaconststd::basic_string}’to‘constchar*’for>argument‘2’to‘voidsyslog(int,constchar*,...)’inServer.cpp/PeCounterline478C/C++Problem我正在守护程序,当使用cout输出到stdio时,errorString值打印得很好,但在使用syslog调用时不会打印。将std::basic_string(char

C++ "error: passing ' const std::map<int, std::basic_string<char>>' as ' this' argument of ..."

使用以下代码(为简洁起见摘录):颜色.h:classcolor{public:color();enumcolorType{black,blue,green,cyan,red,magenta,brown,lightgray,nocolor};colorTypegetColorType();voidsetColorType(colorTypecColortype);stringgetColorText()const;private:colorTypecColortype=nocolor;mapcolors={{black,"black"},{blue,"blue"},{green,"gre