草庐IT

-std=gnu99

全部标签

c++ - 为什么以不同的顺序使用 std::remove_reference 和 std::remove_const 会产生不同的结果?

在下面的代码中,我使用了std::remove_const和std::remove_reference但在两种情况下以不同的顺序给出了不同的结果:#include#include#include#include#includeusingnamespacestd;intmain(){vectorar={"mnciitbhu"};cout::type>::typeTT;cout::value::value::value::type>::typeTT;cout::value::value::value输出是:Firstcase:truefalsefalseSecondcase:falsetr

c++ - std::auto_ptr、delete[] 和泄漏

为什么这段代码不会导致内存泄漏?intiterCount=1000;intsizeBig=100000;for(inti=0;ibuffer(newchar[sizeBig]);}WinXPsp2,编译器:BCB.05.03 最佳答案 因为你(不)幸运。auto_ptr调用delete,而不是delete[]。这是未定义的行为。尝试做这样的事情,看看你是否幸运:structFoo{char*bar;Foo(void):bar(newchar[100]){}~Foo(void){delete[]bar;}}intiterCount=1

c++ - 如何在 std::set 中查找具有特定字段值的对象?

我调用了一个返回std::setconst&的方法其中T是一个类类型。我想要实现的是检查集合是否包含T类型的对象具有自动化测试中断言的特定字段值。应该对多个对象进行此检查。这是一个简单的例子:让类型T是Car举个例子set包含一堆汽车。现在我想在该集合中找到一辆具有特定颜色和特定门数和特定最高速度的汽车。如果找到那辆汽车,则第一个断言为真,应该找到具有其他字段值的下一辆车。我不允许更改T的实现.使用Boost就OK了。你会怎么做? 最佳答案 这取决于T的实现.让我们坚持你的类的例子Car.假设该类看起来像这样:classCar{pu

c++ - std::move 是否使指针无效?

假设如下:templateclassPipeline{[...]voidconnect(OutputSidefirst,InputSidesecond){Queuequeue;first.setOutputQueue(&queue);second.setInputQueue(&queue);queues.push_back(std::move(queue));}[...]std::vector>queues;};move后指向队列的指针在“first”和“second”中是否仍然有效? 最佳答案 Doesstd::moveinval

c++ - std::vector::insert 是否按定义保留?

在std::vector上调用insert成员函数时,是否会在“推回”新项之前保留?我的意思是标准是否保证了这一点?换句话说,我应该这样做吗:std::vectora{1,2,3,4,5};std::vectorb{6,7,8,9,10};a.insert(a.end(),b.begin(),b.end());或者像这样:std::vectora{1,2,3,4,5};std::vectorb{6,7,8,9,10};a.reserve(a.size()+b.size());a.insert(a.end(),b.begin(),b.end());还是其他更好的方法?

c++ - 为什么我会收到编译错误 "use of deleted function ' std::unique_ptr ...”

我收到一个巨大的编译错误信息c:\mingw\include\c++\6.1.0\bits\predefined_ops.h:123:18:error:useofdeletedfunction'std::unique_ptr::unique_ptr(conststd::unique_ptr&)[with_Tp=Deduction;_Dp=std::default_delete]'{returnbool(_M_comp(*__it1,*__it2));}当我将自定义比较器传递给STLset_difference函数时。我的代码:structValue{std::stringded_cod

c++ - 返回类型 std::optional<std::variant<...>>

我遇到这样一种情况,函数必须返回从表中获取的值。此表中的单元格(假设该表正常工作...)可能包含值,也可能不包含值。该值也可以是以下几种类型之一:int,double,string,date(但没有其他类型)。这样的函数会返回什么?返回std::optional>是个好主意吗??这对optional有用吗?和variant? 最佳答案 我认为这是std::monostate的一个有用用途.具体来说,variant.monostate对于variant的情况很有用可能不包含值。使用实际类型而不是optional的好处是访问正常工作吗?

c++ - 在这种情况下使用 std::vector 的哪个构造函数

这看起来很简单,但我很困惑:我创建一个包含一百个vector的方法,比方说,ints是std::vector*pVect=newstd::vector(100);但是,查看std::vector的documentation我看到它的构造函数的形式是explicitvector(size_typen,constT&value=T(),constAllocator&=Allocator());那么,前一个是如何工作的?new是否使用从默认构造函数获得的初始化值调用构造函数?如果是这样的话,会吗std::vector*pVect=newstd::vector(100,my_allocator

c++ - 将 std::runtime_error 捕获为 std::exception 时出错

我们有一个关于trycatch和std::runtime_error的有趣问题。有人可以向我解释为什么这会返回“未知错误”作为输出吗?非常感谢您帮助我!#include"stdafx.h"#include#includeintmagicCode(){throwstd::runtime_error("FunnyError");}intfunnyCatch(){try{magicCode();}catch(std::exception&e){throwe;}}int_tmain(intargc,_TCHAR*argv[]){try{funnyCatch();}catch(std::exce

c++ - 直接写入 std::string 的 char* 缓冲区

所以我有一个std::string和一个接受char*并写入其中的函数。由于std::string::c_str()和std::string::data()返回constchar*,我不能使用它们。所以我正在分配一个临时缓冲区,用它调用一个函数并将它复制到std::string。现在我计划处理大量信息,复制此缓冲区会产生明显的影响,我想避免它。有些人建议使用&str.front()或&str[0]但它会调用未定义的行为吗? 最佳答案 C++98/03不可能。字符串可以在写入时复制,因此它需要处理所有读取和写入。C++11/14在[s