草庐IT

unique-values

全部标签

c++ - 为什么我不能做 *value++;将该内存位置的值加一?

我知道要让它发挥作用,它需要voidincrement(int*value){(*value)++;}这是因为优先级的工作方式需要括号(如果我错了请纠正我)。但是当我执行以下操作时,为什么没有发生编译错误?该值未发生变化,这是意料之中的,因为没有括号,但这究竟发生了什么变化?voidincrement(int*value){*value++;} 最佳答案 value是一个指向整数的指针。指针算法的规则是说,如果你做一个像value++这样的操作,那么之后它将指向value+sizeof(int)(以字节为单位)。这里发生的事情是您将

c++ - 为什么我不能从一对中返回一个 unique_ptr?

为什么我不能从一对中返回一个unique_ptr?#include#include#includeusingnamespacestd;unique_ptrget_value(){pair,int>p(unique_ptr(newint(3)),4);returnp.first;}intmain(void){cout当我尝试使用g++4.6编译它时,我得到:../main.cpp:Infunction‘std::unique_ptrget_value()’:../main.cpp:9:11:error:useofdeletedfunction‘std::unique_ptr::uniqu

c++ - 奇怪的错误:在没有真正创建指针时使用已删除的函数 'std::unique_ptr<_Tp, _Dp>::unique_ptr

我有一个类,看起来像这样:templateusingVectorPtr=std::vector>;templateusingVectorRawPtr=std::vector;classItemsSet{//&items);~ItemsSet()=default;VectorRawPtrGetItems();VectorRawPtrGetSuitableItemsForPeriod(constIPeriod&period);doubleCalculateTotal();private:VectorPtr_items;};构造函数看起来像:ItemsSet::ItemsSet(Vector

c++ - vector<unique_ptr> 的唯一拷贝

我有一个包含vector的类对象.我想要这个对象的拷贝来运行非常量函数。原始拷贝必须保持const。这样一个类的复制构造函数是什么样的?classFoo{public:Foo(constFoo&other):???{}std::vectorptrs;}; 最佳答案 您不能简单地复制std::vector因为std::unique_ptr不可复制,因此它将删除vector复制构造函数。如果您不更改存储在vector中的类型,那么您可以通过创建一个全新的vector来进行“复制”std::vector>from;//thishasthe

c++ - sqrt(int_value + 0.0) -- 它有目的吗?

在我非常奇怪的C++书中做一些作业时,whichI'vebeentoldbeforetothrowaway,有一个非常奇特的代码段。我知道家庭作业总是会给你带来额外的“神秘感”,试图让你感到困惑,比如在单语句for循环之后缩进2行。但我对这个感到困惑,因为它似乎有一些实际用途。基本上是这样的:intcounter=10;...if(pow(floor(sqrt(counter+0.0)),2)==counter)...我对这部分特别感兴趣:sqrt(counter+0.0)+0.0有什么用途吗?这是穷人对替身进行静态转换的方式吗?这是否避免了一些我不使用的编译器的编译器警告?当我遗漏+

c++ - 为什么 std::is_const<const int&>::value 评估为 false?

这是问题Howtocheckifobjectisconstornot?的衍生问题.看到下面的程序我很惊讶#include#includeintmain(){std::cout::value产生了这个输出false在什么情况下可以将constint&视为非常量类型? 最佳答案 也许通过这个例子会更容易理解std::cout::value::value输出:falsetrue第一种类型是指向constint的指针,而在第二种类型中,int*本身是const。因此它的结果是true而前者是false。同样,您对constint的引用。如果

c++ - 为什么这会导致 C2102 : '&' requires l-value

我在想,为什么下面这样的代码(已经注释掉了)会导致C2102:“&”需要左值是否有更好的方法来避免使用tmp变量?classa{private:int*dummy;public:int*get_dummy()const{returndummy;}};intmain(){aaa;//errorC2102:'&'requiresl-value//int**me=&(aa.get_dummy());//OK!int*tmp=aa.get_dummy();int**me=&(tmp);} 最佳答案 因为a::get_dummy()返回一个未

c++ - 为什么 unique_ptr 有一个 nullptr_t 构造函数?

我不清楚有什么好处。如果我有:Foo*foo=nullptr;std::unique_ptrunique_foo(foo);在那种情况下是否调用了nullptr_t构造函数?或者仅当您这样做时:std::unique_ptrunique_foo(nullptr);谢谢!有一些讨论here这是为了允许你传入nullptr_t,否则它不会编译,因为它不会转换为类型指针。所以我的问题可能是为什么它不转换? 最佳答案 一个可能的原因是采用unique_ptr::pointer参数的unique_ptr构造函数是显式。这意味着在没有uniqu

c++ - std::unique_ptr 是 RAII 的应用吗?

这是对它的准确描述吗?有道理吗?您是否保证在unique_ptr超出范围之前它指向的对象不会被删除[即使您没有使用unique_ptr]? 最佳答案 是的,std::unique_ptr遵循RAII设计原则。不,std::unique_ptr不会阻止其他代码做一些愚蠢的事情,比如在属于unique_ptr的指针上调用delete>。unique_ptr本身将在其拥有的对象上调用deleter1,当出现以下任一情况时:超出范围或unique_ptr被重新分配(通过operator=或reset)以指向不同的对象还可以通过移动到不同的智

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