草庐IT

has_equal_operator

全部标签

c++ - Operator = 不是 DLL 中导出的 C++ __interface 的成员

我一直在为库编写一些代码,并尝试使用默认的Win32控制台应用程序来运行所有内容。因为我已经完成了所有类(class),所以我想将所有内容提取到一个DLL中,因此我开始使用通常的宏进行改编:#ifdefMYLIB_EXPORTS#defineDllExport__declspec(dllexport)#else#defineDllExport__declspec(dllimport)#endif我在我的代码中使用一个接口(interface),它是这样定义的:__interfaceDllExportISerializable{voidSerialize(/*...*/);/*someo

c++ - 为什么某些 C++ 标准库 `operator<<` 函数将其流宽度重置为 0?

如C++标准的[ostream.inserters.character]部分所述,在将char或字符串插入流后,流的宽度设置为0:templatebasic_ostream&operator&out,constunsignedchar*s);Dolotsofsensibleandexpectedthings...Callswidth(0).为什么C++标准要求调用width(0)?更改流宽度而不将其重置为原始值的合理性是什么?(据我所知,流的所有其他属性都由流插入运算符保留。)有个相关问题here,这说明了这引起的困惑,但没有解释为什么标准规定了这种行为。

c++ - 带有默认参数的模板类的 operator<< 中的 lambda 错误

谁能告诉我这段代码出了什么问题:template//data;templatevoiditerate(Ff)const{for(unsignedi=0;i&a)//Line17{a.iterate([&os](unsignedi,constB&x){osGCC4.8.1和--std=c++11的错误消息:test.cpp:Infunction‘std::ostream&operator&)’:test.cpp:17:41:error:defaultargumentfortemplateparameterforclassenclosing‘operator&)::__lambda0’a.

c++ - 为什么 operator char*() 在 bool 上下文中覆盖 operator bool() const?

似乎在c++中,在纯bool上下文中,operatorchar*()的优先级高于operatorbool()const;并启用c++11模式和使用explicitoperatorbool()const没有帮助。这是g++中的错误还是语言标准中的错误?或者我没有看到这种疯狂行为的充分理由?问题的简单演示:#includestructA{charbuf[512];interr;operatorchar*(){returnbuf;}operatorconstchar*()const{returnbuf;}operatorbool()const{return!err;}//explicitop

c++ - 覆盖 operator new 以合并 PIMPL 分配

PIMPL习语通常用于对象的公共(public)API,有时也包含虚函数。在那里,堆分配通常用于分配多态对象,然后将其存储在unique_ptr或类似的地方。一个著名的例子是QtAPI,其中大多数对象(尤其是QWidgets等)在堆上分配并由QObject父/子关系跟踪。因此,我们为两次分配支付费用,一次是对象本身使用2*sizeof(void*)来保存PIMPL和v_table指针,一次是私有(private)数据本身。现在来回答我的问题:我想知道这两个分配是否可以合并,类似于make_shared应用的优化。然后我想知道这种优化是否值得,因为malloc的实现可能非常擅长处理字大小

c++ - 防止 "Float-point invalid operation"异常?

我正在使用VisualC++将二进制数据加载到float中,如下所示:doubledValue;memcpy(&dValue,lpData,sizeof(dValue));对于正常情况,这将正常工作。然而,在极少数情况下,当二进制数据损坏时,dValue将无效,对其进行任何进一步操作将导致“浮点无效操作”异常。我在调试器中检查了dValue,它显示为-1.#QNAN00000000000。为了防止异常,我需要在从二进制数据加载后验证dValue。我尝试使用:if(_finite(dValue)){…dosometasks…}但是无效的dValue仍然会导致_finite函数引发Floa

c++ - 有效 C++ : Item 52 and how to avoid hiding all normal operator new & delete versions

在Myer的EffectiveC++的第52项(自定义新的和删除的)的末尾,他讨论了如何在实现自定义版本时避免隐藏正常的新的和删除的版本,如下所示:Ifyoudeclareanyoperatornewsinaclass,you'llhideallthesestandardforms.Unlessyoumeantopreventclassclientsfromusingtheseforms,besuretomakethemavailableinadditiontoanycustomoperatornewformsyoucreate.Foreachoperatornewyoumakeava

c++ - Boost 1.48.0 upgrade_to_unique_lock on Linux : Has something changed since 1. 47 还是我做错了什么?

我有一个小cppsource和hsource一些类的文件。它使用sharedmutexesandsharedlocks.它使用boost1.48.0在Windows上编译时没有错误。它还在linux上编译(之前使用boost1.47)。但是现在有这样的代码:boost::shared_mutexmut_;//...boost::upgrade_locklock(mut_);boost::upgrade_to_unique_lockuniqueLock(lock);导致奇怪的错误:====Buildingcf-fs(debug)====Creatingbin/obj/Debug/cf-f

c++ - QDebug类结构: determine end of input via `operator<<`

Qt有一个很好的调试功能,就是这样叫的qDebug()它生成一行包含一些对象的“标准字符串”,并且——这是重要的部分——打印\n并在second_object之后冲洗Steam.我想通过我的所有类都有一个std::stringto_string()的约定来重现该行为我调用的方法:structmyDebug{templatemyDebug&operator我现在的问题是:在返回*this之后有没有办法找出它?第二次不再调用返回的对象?这样我就可以打印std::endl?qDebug()似乎可以做到这一点。 最佳答案 找到解决方案,发现

c++ - 使用 Boost.Log 构建 Boost "error: target { simple_event_log.mc. } has no type"

我正在尝试构建Boost.Log(http://boost-log.sourceforge.net/libs/log/doc/html/index.html)。我将它添加到我的boost源并执行了我常用的boost构建命令。b2--build-dir="D:\boost\1.51.0\boost"toolset=gccvariant=releaselink=staticthreading=multiruntime-link=static--build-type=complete但什么也没发生,最后我收到了这个:D:/boost/1.51.0/src/tools/build/v2/bui