C++ std::stringstream 运算符<< vs (构造函数)
C++ std::stringstream operator<< vs (constructor)
我的期望是我可以创建一个未初始化的std::stringstream
并为其提供字符串,或者最初使用相同的流创建它并获得相同的结果。当我做第一个案例时,代码按预期工作。然后我尝试了第二种情况,期望会有同样的结果,但没有发生。我错过了什么?
第一个案例的片段。
...
int main() {
constexpr auto APTCP_XML_DOC_PREFIX {R"EOD(<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE doc [<!ENTITY nbsp " ">]>
<doc>
<head>
</head>
<body>
)EOD"};
std::stringstream xml_doc; xml_doc << APTCP_XML_DOC_PREFIX;
...
if (transformer.transform(xml_doc, style_sheet, std::cout) != 0)
std::cerr << "aptcp/main()/transformer.getLastError(): " << transformer.getLastError() << "n" << style_sheet.str() << xml_doc.str();
}
第二种情况xml_doc
以这种方式初始化。
std::stringstream xml_doc(APTCP_XML_DOC_PREFIX);
出现此错误:
Fatal Error: comment or processing instruction expected (Occurred in an unknown entity, at line 2, column 1.)
aptcp/main()/transformer.getLastError(): SAXParseException: comment or processing instruction expected (Occurred in an unknown entity, at line 2, column 1.)
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet id="aptcp_stylesheet"
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="html"
version="4.01"
indent="yes"
doctype-system="http://www.w3.org/TR/html4/strict.dtd"
doctype-public="-//W3C//DTD HTML 4.01//EN"/>
<xsl:template match="xsl:stylesheet" />
<xsl:param name="current_time_p"/>
<xsl:template match="/">
<html>
<body>
<style>
pp {display: none;}
pp, table, tr {
width: 100%;
...
此代码:
#include <iostream>
#include <sstream>
#include <string>
#include <utility>
#include <cstring>
int main() {
constexpr auto BEFORE {"Before"};
std::stringstream un; un << BEFORE;
un << "UN";
std::cout << "un=" << un.str() << "." << std::endl;
std::stringstream con(BEFORE);
con << "CON";
std::cout << "con=" << con.str() << "." << std::endl;
}
显示该值放置在前面而不是末尾。
un=BeforeUN.
con=CONore.
要回答这个问题,缺少模式(std::ios::ate
"打开后立即搜索流的末尾"(:
std::stringstream xml_doc(APTCP_XML_DOC_PREFIX,
std::ios::in|std::ios::out|std::ios::ate);
相关文章:
- "error: no matching function for call to"构造函数错误
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 选择要调用的构造函数
- 如何委托派生类使用其父构造函数?
- 构造函数正在调用一个使用当前类类型的函数
- 没有用于初始化C++中的变量模板的匹配构造函数
- 初始化具有非默认构造函数的std::数组项的更好方法
- 当从函数参数中的临时值调用复制构造函数时
- 在c++构造函数中使用随机字符串生成器
- 一对向量构造函数:初始值设定项列表与显式构造
- 从构造函数抛出异常时如何克服内存泄漏
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 具有默认模板类型的默认构造函数的类型推导
- 使用dynamic_cast和构造函数时出错
- 在c++中使用向量时,如何调用构造函数和析构函数
- std::pair的默认构造函数<>将基本类型(int等)设置为零