草庐IT

STD_PROP_LIST

全部标签

c++ - ‘operator=’ 的模糊重载与 c++11 std::move and copy and swap idiom

我收到以下错误:[matt~]g++-std=c++11main.cpp-DCOPY_AND_SWAP&&./a.outmain.cpp:Infunction‘intmain(int,constchar*const*)’:main.cpp:101:24:error:ambiguousoverloadfor‘operator=’in‘move=std::move((*©))’main.cpp:101:24:note:candidatesare:main.cpp:39:7:note:Test&Test::operator=(Test)main.cpp:52:7:note:Test&

c++ - 如何使用 std::rel_ops 自动提供比较运算符?

这个问题在这里已经有了答案:Idiomaticuseofstd::rel_ops(4个答案)关闭9年前。如何获取运算符>,>=,,和!=来自==和?标准标题定义一个命名空间std::rel_ops,它根据运算符==定义上述运算符和,但我不知道如何使用它(哄骗我的代码将此类定义用于:std::sort(v.begin(),v.end(),std::greater);我在其中定义了非成员运算符:booloperator如果我#include并指定usingnamespacestd::rel_ops;编译器仍然提示binary'>':nooperatorfoundwhichtakesalef

c++ - 从 C++ 流中读取特定数量的字符到 std::string

我非常熟悉C++的大部分内容,但我一直避免使用的一个领域是IO流,主要是因为我一直在不适合它们的嵌入式系统上使用它。然而,最近我不得不熟悉它们,而且我正在努力找出一些我认为应该简单的东西。我正在寻找一种相对有效的方法来将固定数量的字符从C++流读取到std::string中。我可以使用read()方法轻松读取临时char数组并将其转换为std::string,但这相当难看并涉及浪费的拷贝。我还可以使用如下内容将整个流读入字符串:std::stringgetFile(std::fstream&inFile){std::stringstreambuffer;buffer...但是无限制地读

c++ - 将枚举类与 std::bitset 一起使用

首先我想要一个普通的枚举而不是基于位的枚举,因为不同枚举的数量将超出任何整数类型。我还想利用C++11enumclass的类型安全性。为此,自然选择std::bitset,但我不知道如何将这两者绑定(bind)在一起。需要自定义bitset吗?如何绕过这样一个类的实现? 最佳答案 由于enumclasses是枚举的包装器,您可以将它们转换为基础类型。并且使用一些私有(private)继承,您可以有选择地从C++stdlib类中导入一些功能,而不必担心Liskov原则。组合导致更清晰的代码。使用这些功能,我们可以包装std::bits

c++ - 优化编译器能否从 std::unique_ptr 中移除所有运行时成本?

阅读关于std::unique_ptr的http://en.cppreference.com/w/cpp/memory/unique_ptr,我天真的印象是,一个足够聪明的编译器可以用裸指针替换unique_ptr的正确使用,并在unique_ptr时放入一个delete被摧毁。事实真的如此吗?如果是这样,是否有任何主流优化编译器真的这样做了?如果不是,是否可以编写一些具有unique_ptr的部分/全部编译时安全优势的东西,可以优化为没有运行时成本(空间或时间)?注意那些(适本地)担心过早优化的人:这里的答案不会阻止我使用std::unique_ptr,我只是好奇它是一个非常棒的工具

c++ - 将 QString 转换为 std::string

我看过其他几篇关于将QString转换为std::string的帖子,应该很简单。但不知何故,我收到了一个错误。我的代码是使用cmake编译到VS项目中的(我使用的是VSexpress),所以QT库没有问题,我编写的GUI除了这部分之外还可以工作。我有一个QComboBoxcb保存一些对象的名称,还有一个QLineEditlineEdit允许我指定我正在寻找的对象的名称。当我按下开始按钮时,它应该运行一个经过测试和工作的函数,并将来自QComboBox和lineEdit的输入作为参数。下面是点击go按钮时的代码:voidgui::on_go_clicked(){std::strings

具有非 size_t 整数的 std::array 的 C++ 模板参数推导

我正在尝试调整Avoidingstructinvariadictemplatefunction中提供的解决方案根据我的需要。但是,我无法理解G++的行为。考虑以下功能:templateintnextline(consttypenamestd::arrayar){return0;}然后调用nextline(std::array{1,0});与GCC提示不匹配eslong.cpp:Infunction‘intmain()’:eslong.cpp:10:38:error:nomatchingfunctionforcallto‘nextline(std::array)’nextline(std

c++ - std::map::find 性能是否取决于 key 大小?

假设我有以下map定义:std::map其中key是Storage类实例的字符串表示。我的问题是,即使它说map::find复杂性大小是对数,string大小对性能有影响吗?我之所以有这个map是为了能够快速访问Storage类实例。但是,如果Storage类的字符串表示很长怎么办?是否存在最大字符串大小,如果超过该大小,则map的使用变得多余?注意事项我的直觉告诉我,如果Storage类的字符串表示很长,那么使用operator==比较类本身将是也很贵。所以无论字符串有多长,我都最好使用map 最佳答案 是的,map必须对键进行小

c++ - OpenMP、MPI、POSIX 线程、std::thread、boost::thread 如何关联?

有几种方法可以实现多线程。std::thread最终由C++11标准引入,但可以有效地使用boost::thread。每种技术都有特定的语法和内容,但大致用于CPU并行编程。但它们有不同的作用。我知道,例如,MPI和OpenMP用于不同的内存模型。我还知道,技术的选择实际上并不是唯一的,因此可以使用另一种技术(同样是MPI和OpenMP)。为什么它们用于不同的效果但仍然使用相同的源(CPU)?如果我基于这些技术中的每一种技术编译具有并行性的C++程序,会有什么区别(从操作系统和硬件的角度来看)?例如,OpenMP或std::thread使用POSIX线程吗?如果是这样,C++11的线程

c++ - 可变参数函数中的 std::nullptr_t 参数

显然std::nullptr_t参数在没有参数传递时被转换为void*类型的空指针(N3337的第5.2.2/7节)(通过...)。这意味着要正确传递空char*指针,例如,仍然需要强制转换:some_variadic_function("a","b","c",(constchar*)std::nullptr);因为无法保证空void*与空char*具有相同的位模式。正确吗?这也意味着在这种情况下,std::nullptr与0没有任何优势,除非为了清楚起见。 最佳答案 你问:sincethereisnoguaranteethatan