草庐IT

conversion-operator

全部标签

c++ - 如何为迭代器类型实现 operator->?

有没有办法实现operator->,不只是operator*。要使以下代码正常工作:Iteratorit=...i=(*it).get();i=it->get();//alsoworks假设值类型有get方法。当Iterator实现如下:templateclassIterator{Toperator*(){return...}Toperator->(){return...}}这里...是获取正确T对象的实现。当我以这种方式实现它时,它会以某种方式不起作用。我想我误会了什么。 最佳答案 operator->应该返回一个指针:T*ope

c++ - 为什么我不能用 T=vector<int> 实例化 operator<<(ostream&, vector<T>&)?

在思考C++iteratorquestion,我写了这个示例程序:#include#include#include#includetemplatestd::ostream&operator&v){os(os,","));returnosv(3);std::vector>vv(3,v);std::cout我用gcc编译这个程序并得到典型的100行错误。我相信相关的部分是:it.cc:19:instantiatedfromhere/usr/include/c++/4.4/bits/stream_iterator.h:191:error:nomatchfor‘operator((std::o

c++ - "Narrowing conversion from ' int ' to ' char ' inside { }"交叉编译时的合法值

我有一个C++项目,我在我的机器上使用g++编译(编译到“主机”)和使用交叉编译器的ARM处理器(在我的例子中是arm-cortex_a8-linux-gnueabi-g++)。我正在转换为C++0x/11标准,编译初始化列表时出现错误,我可以在以下代码段中重现该错误:intmain(void){charc[1]={-108};}这个程序看起来是正确的,因为-108是char的合法值。使用g++编译它不会产生以下命令行错误:g++example.cc-std=c++0x但是,当我使用交叉编译器进行编译时,如下所示:arm-cortex_a8-linux-gnueabi-g++examp

c++ - 为什么将 operator void*() 转换函数添加到 C++ 流类中?

C++流类中有一个转换函数operatorvoid*()const。以便所有流对象都可以隐式转换为void*。在与SO上的程序员互动期间,他们建议我不要使用void*,除非你有充分的理由使用它。void*是一种消除类型安全和错误检查的技术。因此,由于此转换函数的存在,以下程序是完全有效的。这是C++standardlibrary.中的一个缺陷。#includeintmain(){deletestd::cout;deletestd::cin;}观看现场演示here.上述程序在C++03中有效,但在C++11及更高版本的编译器中编译失败,因为此转换功能已被删除。但问题是,如果它很危险,为什

c++ - 在 C++ 中实现 operator<

我有一个包含几个数字字段的类,例如:classClass1{inta;intb;intc;public://constructorandsoon...booloperator我需要使用此类的对象作为std::map中的键.因此,我实现operator.operator的最简单实现是什么在这里使用?编辑:的含义只要任何字段不相等,就可以假设以保证唯一性。编辑2:一个简单的实现:boolClass1::operatorother.a)returnfalse;if(bother.b)returnfalse;if(cother.c)returnfalse;returnfalse;}这篇文章背后

c++ - 对 'operator delete(void*)' 的 undefined reference

我是C++编程的新手,但从事C和Java方面的工作已经很长时间了。我正在尝试在我正在处理的一些串行协议(protocol)中做一个类似接口(interface)的层次结构,并不断收到错误:Undefinedreferenceto'operatordelete(void*)'(简化的)代码如下:PacketWriter.h:classPacketWriter{public:virtual~PacketWriter(){}virtualuint8_tnextByte()=0;}StringWriter.h:classStringWriter:publicPacketWriter{publi

c++ - 为什么我在 C++ 中的语句表达式中得到 "operation may be undefined"?

为了简单描述问题,请看下面的代码:intmain(){inta=123;({if(a)a=0;});return0;}我从[-Wsequence-point]收到此警告Line4:warning:operationon'a'maybeundefined我的g++版本是4.4.5如果谁能解释这个简单的问题,我将不胜感激。顺便说一句,您可以在this中的#7中找到我的原始程序和原始问题中文网站(非必须)UPD1:虽然将代码改成({if(a)a=0;a;})可以避免警告,但我认识到问题的真正原因可能不是复合语句中的最后一项应该是一个后跟分号的表达式。因为纪录片还说如果你在大括号中最后使用某种

c++ - 为什么我不能用 operator>> 读取 fstream 的二进制数据?

如果我执行以下操作:ifstreamfile;file.open("somefile",ios::binary);unsignedintdata;file>>data;我的流将始终设置failbit并且data将保持未初始化状态。但是,如果我改为读取char或unsignedchar,则流很好。perror()告诉我“结果太大”。我在Google上看到的唯一内容是一个建议说operator>>不应该用于二进制数据(更喜欢read()),但我发现操作符更干净,更易于使用——并且不需要强制转换所有内容。谁能解释一下这个问题? 最佳答案

c++ - 在 gdb 中调用 operator<<

您如何调用operator从gdb内部?换句话说,如何在gdb中打印一个对象?callstd::cout或calloperator似乎不适合我!有什么想法吗? 最佳答案 我找到的唯一方法是:call'operator自从std::cout由于某种原因gdb看不到,我不得不像这样创建自己的:std::ostreammycout(std::cout.rdbuf());您没有说明任何想要这样做的理由,但不会printyourvariable更容易?如果这是绝对必须的,您可以拥有Print类中的方法并从operator调用它然后调用Prin

c++ - "ambiguous overload for ' operator[] '"如果存在到 int 的转换运算符

我正在尝试为一个类实现类似vector和类似map的[]运算符。但我从我的编译器(g++和clang++)收到错误消息。发现它们只有在类也有转换为整数类型的运算符时才会发生。现在我有两个问题。首先是我不知道为什么编译器在类有的时候不能区分[](conststd::string&)和将运算符转换为整数。第二个......我需要转换和索引运算符。如何解决?作品:#include#includestructFoo{Foo&operator[](conststd::string&foo){}Foo&operator[](size_tindex){}};intmain(){Foof;f["foo