草庐IT

SCAN_POINTER_START

全部标签

c++ - varargs(va_list va_start) 不适用于传递引用参数

这个问题在这里已经有了答案:关闭12年前.PossibleDuplicate:Aretheregotchasusingvarargswithreferenceparameters您好,我对可变参数有疑问。查看我的代码(MicrosoftVisualStudio2005或2008)。#includestructTest{inta;};voidT1(intn,...){va_listargs;va_start(args,n);char*p=va_arg(args,char*);va_end(args);}voidT2(Testn,...){va_listargs;va_start(args

c++ - 是否有 boost::weak_intrusive_pointer?

出于遗留原因,我需要使用侵入式指针,因为我需要能够将原始指针转换为智能指针。但是我注意到没有用于boost的弱侵入性指针。我确实在boost线程列表中找到了有关它的讨论,但没有具体内容。有人知道弱侵入指针的线程安全实现吗?谢谢丰富 最佳答案 这没有任何意义。详细说明:weak_ptr指向与shared_ptr相同的counter对象实例。当shared_ptr超出范围时,counter的实例保持不变(有效计数为0),这允许weak_ptr实例检查它们是否有效地指向一个已释放的对象。使用侵入式计数,计数器集成在对象中。当计数达到0时,

c++ - std::partial_sum 和 std::inclusive_scan 有什么区别?

在阅读std::inclusive_scan时,似乎没有任何例子。我觉得它与std::partial_sum非常相似.partial_sum:templateOutputItpartial_sum(InputItfirst,InputItlast,OutputItd_first);inclusive_scan:templateOutputItinclusive_scan(InputItfirst,InputItlast,OutputItd_first);有人可以详细说明他们的区别吗?我什么时候会选择其中之一? 最佳答案 std::i

c++ - 为什么将数组的地址分配给指针 "my_pointer = &my_array"是编译错误?

intmy_array[5]={0};int*my_pointer=0;my_pointer=&my_array;//compilererrormy_pointer=my_array;//ok如果my_array是数组的地址,那么&my_array会给我什么?我收到以下编译器错误:error:cannotconvert'int(*)[5]'to'int*'inassignment 最佳答案 my_array是一个由5个整数组成的数组的名称。编译器会很乐意将其转换为指向单个整数的指针。&my_array是一个指向5个整数数组的指针。编

C++11:将 std::is_pointer 扩展为 std::shared_ptr

我想重载std::is_pointer在C++11中为std::shared_ptr生成真值同样,因为后者的行为非常类似于T*.#includenamespacestd{templatestructis_pointer>:std::true_type{};templatestructis_pointer>:std::true_type{};}我想知道为什么这个重载还没有包含在标准实现中。有没有我忽略的陷阱?当然也可以引入一个新特性is_shared_ptr.其实我一开始就尝试了下面的代码:templatestructis_pointer::type>>:std::true_type{}

c++ - static_cast<Derived *>(Base pointer) 是否应该给出编译时错误?

static_cast(Basepointer)是否应该给出编译时错误?classA{public:A(){}};classB:publicA{public:B(){}};intmain(){A*a=newA();B*b=static_cast(a);//CompileError?} 最佳答案 它不会给出编译时错误,因为Base-Derived关系可以在运行时存在,具体取决于被强制转换的指针的地址。static_cast总是成功,但如果你不转换为正确的类型,则会引发undefined-behavior。dynamic_cast可能会

c++ - 更漂亮的 "pointer to last element"语法,std::vector?

我想知道是否有更漂亮的语法来获取指向C++vector中最后一个元素的普通指针(不是迭代器)std::vectorvec;int*ptrToLastOne=&(*(vec.end()-1));//theotherwayIcouldseewasint*ptrToLastOne2=&vec[vec.size()-1];但是这两个都不是很好看! 最佳答案 int*ptrToLastOne=&vec.back();//precondition:!vec.empty() 关于c++-更漂亮的"po

c++ - "smart pointer to member"的真实示例是什么?

为了澄清英语中可能存在的优先级歧义:我们正在讨论“智能(指向成员的指针)”,而不是“指向成员的(智能指针)”。我会将指向成员的智能指针定义为带有operator->*(T*lhs,Xrhs)的类X。在他的文章"Implementingoperator->*forSmartPointers",ScottMeyers只是简单地触及smart指向成员的指针,因为当时(1999年)具体问题对于原始指向成员的指针(旁注:后者可以用lambdahere优雅地解决)。无论如何,ScottMeyers在脚注中写道:Shortlyafterwritingthedraftofthisarticle,one

c++ - 表达式 : auto p {make_pointer()}; 的不同编译器行为

以下程序的正确行为是什么?//example.cpp#include#includestructFoo{voidBar()const{std::coutMakeFoo(){returnstd::make_shared();}intmain(){autop{MakeFoo()};p->Bar();}当我在我的LinuxRHEL6.6工作站中编译它时,我得到以下结果:$g++-vgccversion5.1.0(GCC)$g++example.cpp-std=c++14-Wall-Wextra-pedantic$./a.outFoo::Bar()但是$clang++-vclangversio

C++ 类型转换 : cast a pointer from void pointer to class pointer

如何将指向void对象的指针转换为类对象? 最佳答案 使用static_cast。请注意,只有当指针确实指向指定类型的对象时,您才必须这样做;也就是说,指向void的指针的值取自指向此类对象的指针。thing*p=whatever();//pointertoobjectvoid*pv=p;//pointertovoidthing*p2=static_cast(pv);//pointertothesameobject如果您发现自己需要这样做,您可能需要重新考虑您的设计。你放弃了类型安全,让编写无效代码变得容易:something_el