草庐IT

std-proposals

全部标签

c++ - 如果 volatile 是不必要的,为什么 std::atomic 方法提供 volatile 重载?

thisgoodanswer说:volatileiscompletelyunnecessarywhenusedwithstd::atomic.然而,std::atomic_fecth_sub提供重载函数:templateTatomic_fetch_sub(volatilestd::atomic*obj,typenamestd::atomic::difference_typearg)noexcept;我的问题是:如果volatile对于std::atomic来说完全没有必要,为什么C++标准要为它提供一个重载函数? 最佳答案 Ifvo

c++ - 关于 std::type_info 中的反射扩展的一般感觉是什么?

我注意到反射是其他语言的开发人员发现c++非常缺乏的一项功能。对于某些应用程序,我真的明白为什么!如果你有反射,那么编写IDE的自动完成之类的东西就容易多了。当然,如果我们拥有序列化API,世界会变得更简单。另一方面,C++的主要原则之一是不要为不用的东西付费。这是完全有道理的。这是我喜欢C++的地方。但我想到可能会有妥协。为什么编译器不对std::type_info结构添加扩展?不会有运行时开销。二进制文件最终可能会更大,但这可能是一个简单的编译器开关来启用/禁用,老实说,如果您真的关心空间节省,您可能会禁用异常和RTTI。有些人提到模板存在问题,但编译器已经很高兴地为模板类型生成了

c# - NUnit 不捕获 std::cerr 的输出

我在C#中有一个nunit测试,它调用C++DLL中函数的C#包装器。C++代码使用std::cerr输出各种消息。无法使用nunit-console/out/err或/xml开关重定向这些消息。在nunit(GUI版本)中,输出不会出现在任何地方。我希望能够在nunit(GUI版本)中看到这个输出。理想情况下,我希望能够在测试中访问此输出。感谢您的帮助。 最佳答案 重定向std::cerr就是用你自己的替换流缓冲区。在我们退出之前在原始缓冲区中恢复是很重要的。我不知道你的包装器是什么样的,但你可能会想出如何让它读取output.s

c++ - 如何在 QtScript 中使用 C++ std 复数

我试图找出如何在QtScript中使用复数,以便可以从QtScript调用用复数参数定义的槽。用户还应该可以从脚本访问复数的基本代数(+、-、exp、...)。只是为了说明,我想调用的是:#includetypedefcomplexComplex;classMyCppClass:publicQObject{Q_OBJECTpublic:...publicslots:voidmySignal(ComplexrCValue);!!有什么想法吗?谢谢! 最佳答案 我认为您必须在QtScript中实现复杂的代数(类似于http://exam

c++ - std::tr1::function::target<TFuncPtr> 和协变/逆变

因为我喜欢用C#和C++编程,所以我打算实现一个类似C#的事件系统,作为我计划的C++SFML-GUI的坚实基础。这只是我的代码的摘录,我希望这能澄清我的概念://Event.h//STLheaders:#include#include#include//boostheaders:#include#includenamespaceUtils{namespaceGui{#defineIMPLEMENTS_EVENT(EVENTNAME,EVENTARGS)public:\Utils::Gui::IEvent&EVENTNAME(){returnm_on##EVENTNAME;}\prot

c++ - std::string 的引用计数

我正在查看basic_string的代码(与g++4.2.1捆绑在一起)。复制构造函数使用grab()函数来“抓取”字符串的拷贝(增加其引用计数):_CharT*_M_grab(const_Alloc&__alloc1,const_Alloc&__alloc2){return(!_M_is_leaked()&&__alloc1==__alloc2)?_M_refcopy():_M_clone(__alloc1);}只有当两个字符串的分配器相同时,这才会增加引用计数——这是有道理的。但是,复制构造函数是:basic_string(constbasic_string&__str):_M_d

c++ - 带有标准容器的 std::shared_ptr

我有一个容器shared_ptrs和我将这些对象交给WindowsAPI,稍后我使用原始ptr获得回调。我要找对shared_ptr事后。这可以用shared_ptr干净地完成吗?(不使用shared_from_this())。非常基本的例子:classCFoo{};typedefstd::shared_ptrCFooPtr;typedefstd::setCFooSet;externCFooSetm_gSet;voidSomeWindowsCallBack(CFoo*pRawPtr){m_gSet.erase(pRawPtr);}我知道这可以用intrusive_ptr来完成很容易,但

c++ - 将 std::forward_as_tuple() 结果传递给可能从该对象的右值引用成员移动的多个函数?

编辑:我认为我所问的最可能的用例是创建一个从std::forward_as_tuple()接收右值引用元组的函数.想到这个问题的原因是因为我正在检查传递给构造函数初始值设定项的对象的成员以查看它们是否是右值引用(我乐于接受建议告诉我这是wrongwrongwrongwrong...希望遵循经验法则以避免将来出现这种情况,但这就是引发问题的原因)。我突然想到,在稍微不同的上下文中,我可能最终将一个具有右值引用成员的对象传递给多个函数(或函数对象),我可能会或可能不会控制,这些成员可能会移动。templatevoidmy_func(std::tuple&&tup){//iftup'smem

c++ - 将 std::cout 重定向到 QTextEdit

是否有可能(更重要的是-如何-)将输出流重定向到QTextBox。这样如果我写std::cout在应用程序的任何地方它都被重定向到我定义的文本框?我尝试了显而易见的(其中ui.textEdit是指向文本编辑框的指针):std::cout.rdbuf(ui.textEdit);std::cout但是这不起作用。(明显地)。-将cout重定向到qDebug也不起作用(甚至将qDebug重定向到文本字段)。顺便说一句,我正在使用qt4.8...编辑:所以我尝试了邮件列表中发布的解决方案。但是现在出现了访问冲突。classMainInterface:publicQMainWindow{Q_OB

c++ - 如何*正确*地将 std::string 转换为无符号 char[] 数组。我想我做错了,有人指出我正确的方向吗?

我目前正在对网络协议(protocol)进行逆向工程,并且我编写了一个小型解密协议(protocol)。我曾经将数据包的字节定义为一个无符号字符数组,如下所示:unsignedcharbuff[]="\x00\xFF\x0A"etc.为了不对每个数据包多次重新编译程序,我制作了一个小型GUI工具,它可以从字符串中获取\xFF表示法中的字节。我通过以下方式做到了这一点:intlength=int(stencString.length());unsignedchar*buff=newunsignedchar[length+1];memcpy(buff,stencString.c_str()