草庐IT

operator_name

全部标签

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

python - c++中python "type(<name>, <bases>, <dict>)"的等价物是什么?

好吧,我正在将python3.3嵌入到C++应用程序中。我希望在C++端动态创建一个Python类,就像我在Python中执行以下操作一样:my_type=type("MyType",(object,),dict())我知道我总是可以导入“builtins”模块,但我一般会尽量避免在C++端导入。谢谢! 最佳答案 以下似乎工作得很好:PyObject*type(constchar*name,boost::python::tuplebases,boost::python::dictdict){returnPyType_Type.tp_

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++ - 编译错误 : `‘error_category’ does not name a type` with g++ 6. 3.0

我尝试编译这个C++/Python库https://bitbucket.org/fluiddyn/fluidfft如果安装了mpi4py,它运行良好。如果没有安装mpi4py,不使用MPI的代码无法编译。编译Cython文件时出现错误。错误很长,开始于:Infileincludedfrom/usr/include/c++/6/bits/ios_base.h:46:0,from/usr/include/c++/6/ios:42,from/usr/include/c++/6/ostream:38,from/usr/include/c++/6/iostream:39,fromsrc_cpp/

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 named_semaphore 示例?

我没能找到一个很好的例子来展示如何使用boost::interprocess::named_semaphore(甚至在Boost网站上也没有)。我可以看到一些关于interprocess_semaphore的东西,但它们似乎完全不同,我不知道为一个显示的内容是否也适用于另一个。任何人都可以给我一些指向此类示例/tutorials/documentation的链接吗?谢谢。 最佳答案 interprocess_semaphore和named_semaphore之间的主要区别在于interprocess_semaphore是通过使用共享

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++ - Qt错误: 'const class QString' has no member named 'toStdString'

我收到此错误error:'constclassQString'hasnomembernamed'toStdString'虽然QString有它。(link).代码std::stringMessage::toStdString()const{returnm_string.toStdString();} 最佳答案 直接从这里复制答案:HowtoconvertQStringtostd::string?QStringqs;//EitherthisifyouuseUTF-8anywherestd::stringutf8_text=qs.toU

c++ - 在 C++ 中绕过 operator new 的重写

有没有办法绕过operatornew的覆盖?是这样的:void*::operatornew(std::size_tsize){void*p=(::operatornew(size));//Butoriginal,_not_infiniterecursion//dostuffwithpreturnp;}背景:我有一些遗留代码,我们最近切换到使用VisualStudio2012进行编译。现在,当malloc无法_heap_alloc足够的内存块时,我们会随机崩溃。(是的,代码到处都是小的内存泄漏和其他不良行为。但不幸的是,彻底清理是不现实的,大约有500000SLOC。)我目前的理论是,原