草庐IT

basic_stringstream

全部标签

c++ - `std::stringstream::fail()` 读后写应该返回什么值? (海湾合作委员会与 clang )

考虑以下代码片段:#include#includeintmain(){std::stringstreamss;ss>s;ssclang++trunk打印出如下结果:ss.eof()=truess.good()=falsess.bad()=falsess.fail()=falsess.str()=12345onwandboxg++trunk打印如下结果:ss.eof()=truess.good()=falsess.bad()=falsess.fail()=truess.str()=12345onwandbox如您所见,ss.fail()的值在两个编译器之间是不同的。在这种情况下,标准对s

c++ - 如何从 std::basic_ios 为 OS X 上的 clang 获取文件描述符?

我正在将一些代码移植到DarwinOSX,作为更改的一部分,我们从gcc转到clang编译器。代码中有一个2005年的函数,在网上多处贴过。它为几个不同的旧版本GCC提供了功能,我已经编辑了除最后一个版本之外的所有功能,v3.4.0或更高版本。该代码取决于两个GCC特定类:__gnu_cxx::stdio_filebuf和__gnu_cxx::stdio_sync_filebuf。//!Similartofileno(3),buttakingaC++streamasargumentinsteadofa//!FILE*.Notethatthereisnowayforthelibraryt

c++ - std::stringstream 可以设置失败/坏位的方法?

我用于简单字符串拆分的一段常见代码如下所示:inlinestd::vectorsplit(conststd::string&s,chardelim){std::vectorelems;std::stringstreamss(s);std::stringitem;while(std::getline(ss,item,delim)){elems.push_back(item);}returnelems;}有人提到这会默默地“吞下”std::getline中发生的错误。当然,我同意是这样的。但我突然想到,在实践中这里可能会出现什么问题,我需要担心。基本上这一切都归结为:inlinestd::

c++ - 从 std::stringstream 读取 uint8_t 作为数字类型

我的理解是,从stringstream读取uint8_t是一个问题,因为stringstream将解释uint8_t作为char。我想知道如何从stringstream中读取uint8_t作为数字类型。比如下面的代码:#include#includeusingnamespacestd;intmain(){uint8_tui;std::stringstreamss("46");ss>>ui;cout打印出52。我希望它打印出46。编辑:另一种方法是从stringstream中读取一个string,然后将解决方案转换为uint8_t,但这破坏了nice链接属性。比如在我实际要写的代码中,经

c++ - 对于字符串对象连接,stringstream 是否比字符串的运算符 '+' 更好?

比如我有两个字符串对象:stringstr_1,str_2。我想连接到他们。我可以使用两种方法:方法一:std::stringstreamss;//std::stringstr_1("hello");//std::stringstr_2("world");ss方法二:std::stringstr_1("hello");std::stringstr_2("world");conststd::stringdst_str=str_1+str_2;因为字符串的缓冲区是只读的,当你改变字符串对象时,它的缓冲区会被销毁并创建一个新的缓冲区来存储新的内容。那么方法一比方法二好吗?我的理解正确吗?

c++ - 为什么 std::basic_ios 会重载一元逻辑否定运算符?

C++IO流的基类std::basic_ios定义了operatorvoid*()以返回!fail()和operator!()返回fail()。这让我想知道为什么我们根本需要operator!()。当然,!is也可以通过隐式调用operatorvoid*()并取反其结果来工作。我在这里遗漏了什么,还是纯粹出于历史原因定义了std::basic_ios::operator!()?Aquestiononcomp.lang.c++.moderated也没有带来任何答案。 最佳答案 使用旧的(阅读:cfront后不久)C++编译器,编译器不

C++ std::stringstream operator<< 重载

我有以下类(class)(原型(prototype)):classToken{public://members,etc.friendstd::stringstream&operator运算符是这样实现的:std::stringstream&operator现在,我尝试像这样使用它:std::stringstreamout;Tokent;//initialization,etc.outVS给我报错,说 最佳答案 std::stringstream&operator应该是std::ostream&operator

c++ - 如何读取动态大小的stringstream?

我想尝试使用stringstream进行作业,但我对它的工作原理有点困惑。我进行了快速搜索,但找不到任何可以回答我问题的内容。假设我有一个动态大小的流,我怎么知道什么时候停止写入变量?stringvar="2++asdf3*c";stringstreamss;ss>var;cout我的输出是:2++asdf3*cc我不确定为什么最后会有额外的“c”,尤其是因为_M_in_cur=0x1001000d7"" 最佳答案 你在最后得到了额外的c,因为你在执行提取后没有测试流是否仍然良好:while(ss)//testifstreamisg

c++ - 从 DLL 导出 STL std::basic_string 模板时,出现 LNK2005 错误

好的,所以我已经阅读了几个关于这个主题的问题和文章,我觉得我了解基础知识,但我仍然遇到问题。我有一个DLL,它导出一个以std::string作为成员的类。我的主程序包含也有字符串的类,并且它使用DLL。如果我在VS2010中编译DLL,我会收到以下警告:warningC4251:'MyClass::data':class'std::basic_string'needstohavedll-interfacetobeusedbyclientsofclass'MyClass'当我编译EXE时,我得到了相同的警告,但没有错误,程序编译并运行。事实上,这是一个大项目,所以我收到了40条警告,我

c++ - basic_istream<>::tellg() 和 basic_ostream<>::tellp() 的区别

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。我只是想知道为什么成员函数tellg()在basic_istream中定义类和tellp()在basic_ostream中定义类有不同的名称。是因为basic_fstream源自basic_istream和basic_ostream?