草庐IT

binary-arithmetic-operations

全部标签

c++ - EASTL与STL,std::vector<uint64_t>::operator[]怎么会有这么大的性能差异

根据http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.htmlvector::operator[]在EASTL中比“常用的STL商业版本”快2%到70%。除非商业版的STL使用范围检查,否则比较不公平,这么简单的操作怎么可能有这么大的速度差异?更新:似乎答案是EA工程师只是通过与使用范围检查的版本进行比较来作弊...... 最佳答案 文档指出他们使用VC++2005进行Windows测试,checkediterators是enabledbydefault(是的

c++ - std::addressof 是否否定 STL operator& 要求?

为了使类型与C++03标准库“很好地配合”,重载operator&()被认为是一个坏主意,因为地址需要正确使用类型和重载它会产生意想不到的问题;这里的经典示例是ATL::CComBSTR。随着std::addressof()在C++11及更高版本中的出现,这是否否定了对标准库中使用的类型的旧要求?是否在C++11的标准中明确说明(或从中删除)要求,即规范是否要求标准库使用std::addressof()? 最佳答案 容器的value_type只有几个要求。它们主要取决于容器,但对于一般情况,要求至少是MoveConstructibl

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++ - 为什么将 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