草庐IT

compound-operator

全部标签

c++ - 如何强制 std::stringstream operator >> 读取整个字符串?

如何强制std::stringstreamoperator>>读取整个字符串而不是在第一个空格处停止?我有一个模板类,用于存储从文本文件中读取的值:templateclassValueContainer{protected:Tm_value;public:/*...*/virtualvoidfromString(std::string&str){std::stringstreamss;ss>m_value;}/*...*/};我试过设置/取消设置流标志,但没有帮助。澄清该类是一个容器模板,可以自动转换为类型T或从类型T自动转换。字符串只是模板的一个实例,它还必须支持其他类型。这就是为什

c++ - 为什么我不能对 std::ofstream 使用 operator bool()

为什么我不能写下面的代码?#include#includebooltouch(conststd::string&file_path){returnstd::ofstream(file_path,std::ios_base::app);}intmain(){touch("foo.txt");}输出prog.cpp:Infunction'booltouch(conststring&)':prog.cpp:6:52:error:cannotconvert'std::ofstream{akastd::basic_ofstream}'to'bool'inreturnreturnstd::ofst

c++ - 为什么让 operator new 私有(private)中断 std::shared_ptr?

我正在实现一个多态类型(称之为A),我想通过std::shared_ptr专门管理它。为了允许在派生类的构造函数中使用shared_from_this,A使用new分配,然后初始化一个成员std::shared_ptr给自己自动管理它的生命周期。为了帮助实现这一点,我决定将类特定的operatornew设为私有(private),并计划使用create()辅助函数而不是new和make_shared。该设计可能看起来有点滑稽,但在我正在处理的UI库的上下文中是有意义的。一个最小的可重现示例如下:structA{A():m_sharedthis(this){}voiddestroy(){

c++ - ifstream 的 operator>> 来检测行尾?

我有一个不规则列表,其中的数据如下所示:[Number][Number][Number][Number][Number][Number][Number][Number][Number][Number][Number][Number][Number][Number][...]请注意,有些行有2个数字,有些有3个数字。目前我的输入代码如下所示inputFile>>a>>b>>c;但是,我想让它忽略只有2个数字的行,有没有简单的解决方法?(最好不使用字符串操作和转换)谢谢 最佳答案 使用getline然后分别解析每一行:#include#

c++ - 从命令行构建 x64 C++ 项目说 : This operation should only take place on the UI thread

VisualStudio2013在构建时出现问题,显示错误信息如下:c:>devenv/builddebug/project(projectname)/projectconfig"debug|x64"(solutionName).sln1>ThisoperationshouldonlytakeplaceontheUIthread. 最佳答案 我刚刚在使用VisualStudio2015编译C++代码时遇到了这个问题(错误:此操作应该只发生在UI线程上)。最后追踪到编译失败的项目的.vcxproj.filters文件。该文件已从另一个

c++ - operator-> "chained"是指针吗?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Overloadingoperator->你好,我看过operator->()在评估后被链接(重新应用),例如:structBar{Bar():m_str("Helloworld!"){}conststring*operator->()const{return&m_str;}stringm_str;};structFoo{constBar&operator->()const{returnm_bar;}Barm_bar;};intmain(){Foof;coutc_str()工作得很好,需要三个operator

c++ - 告诉 `string::operator==` 从字符串的后面开始比较

是否有可能/(相对)容易/std™从字符串的后面开始比较,还是我应该为此编写自己的函数?这当然会相对简单,但我仍然相信任何一天都有一个标准库实现。字符串的结尾几乎是唯一的,而前面很常见,这是我需要这种“优化”的唯一原因。谢谢! 最佳答案 到目前为止我能想到的最好的是str1.size()==str2.size()&&std::equal(str1.rbegin(),str1.rend(),str2.rbegin()) 关于c++-告诉`string::operator==`从字符串的后面

c++ - vector<bool>::operator[] 行为不当?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Whyvector::referencedoesn’treturnreferencetobool?我曾经认为std::vector::operator[]我们得到了被访问项目的深度拷贝,但似乎并不总是如此。至少,用vector下面的测试代码给出了不同的结果:#include#includeusingnamespacestd;templatevoidTest(constT&oldValue,constT&newValue,constchar*message){coutv;v.push_back(oldValue)

c++ - 为什么不使用强制转换语法调用 "operator void"?

在玩thisanswer时通过userGMan我制作了以下代码片段(使用VisualC++9编译):classClass{public:operatorvoid(){}};Classobject;static_cast(object);(void)object;object.operatorvoid();通过调试器后,我发现转换为void不会调用Class::operatorvoid(),只有第三次调用(显式调用运算符)实际上调用了运算符,这两个转换什么都不做。为什么operatorvoid没有用强制转换语法调用? 最佳答案 在§1

c++ - `std::basic_string::operator[]` 能否返回一个 "distant"保护页 nul 终止符?

所以,operator[]没有直接说s[s.size()]必须是s[s.size()-1]之后的字符在内存中。它的措辞似乎是为了避免做出这种说法。但是s.data()指出s.data()+k==&s[k],和s.data()必须返回一个指针。忽略使用&的看似标准的缺陷在CharT以上而不是std::addressof,是否可以自由返回不同的CharT(比如,一个在protected页面上,或在ROM中)对于s[s.size()]在第一次调用s.data()之前?(很明显,它可以将缓冲区安排在一个只读页面上,上面有一个零;我说的是另一种情况)明确地说:据我所知,如果s.data()永远不