草庐IT

UINT_PTR

全部标签

c++ - __u8 和 uint8_t 之间的区别

谁能解释一下uint8_t和__u8之间的区别?我知道uint8_t是在stdint.h中定义的,它们在每个unix系统上都可用。/*Unsigned.*/typedefunsignedcharuint8_t;typedefunsignedshortintuint16_t;...如果我使用它们,那么我的意图是显而易见的。现在我偶然发现了__u8和__u16类型。对我来说似乎是一样的。其中一些类型在linux/types.h中定义#ifdef__CHECKER__#define__bitwise____attribute__((bitwise))#else#define__bitwise

c++ - 错误 C2280 : attempting to reference a deleted function (unique_ptr)

我检查了一些使用原始指针的旧代码,并将它们更改为unique_ptr。现在,当我尝试编译代码时,收到此错误消息:Error1errorC2280:'std::unique_ptr>::unique_ptr(conststd::unique_ptr>&)':attemptingtoreferenceadeletedfunctiond:\visualstudio2013\vc\include\xmemory0关于这种情况的编译器输出很大——为了节省这个问题的空间,请参阅here.据我所知,这与我使用唯一指针的方式有关。它从这里开始(level.h,第65-66行):typedefstd::

c++ - 如何正确转发unique_ptr?

转发std::unique_ptr的正确方法通常是什么?以下代码使用了std::move,我认为这是经过深思熟虑的做法,但它因clang而崩溃。classC{intx;}unique_ptrtransform1(unique_ptrp){returntransform2(move(p),p->x);//transform2(unique_ptrp,intval){p->x*=val;returnp;}在通过std::move将所有权转移到下一个函数之前,是否有比简单地确保从p获得所需的一切更稳健的约定?在我看来,在对象上使用move并访问它以向同一函数调用提供参数可能是一个常见的错误。

c++ - 如何处理不断发展的 C++ std::namespace?例如:std::tr1::shared_ptr 对比 std::shared_ptr 对比 boost::shared_ptr 对比 boost::tr1::shared_ptr

对于我目前正在处理的代码,我们有时需要使用较旧的编译器在一些较旧的系统上进行编译(例如,我们在较旧的IBMBlueGene/L上运行sims,其支持契约(Contract)规定了一些非常旧的C++编译器)。代码本身使用了shared_ptr,最初是为使用std::tr1::shared_ptr而编写的。在旧的BlueGene机器上编译时,我很快意识到它没有tr1::实现,所以我切换到boost::shared_ptr。原来还有一个boost::tr1::shared_ptr。现在代码在我们的研究小组之外得到了更广泛的使用,可移植性变得更加重要。在大型代码库中处理这些不断演变的标准库问题

c++ - scoped_ptr 所有权

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:WhatisasmartpointerandwhenshouldIuseone?我正在阅读anarticle我找到了一个小例子来演示boost::scoped_ptr的使用:#include#include#include#includestaticintcount=0;classprinter{intm_id;public:printer(void):m_id(count++){}~printer(void){std::coutp1(newprinter);boost::scoped_ptrp2(newpri

c++ - 为什么 "stdint.h"的实现不同意 UINT8_C 的定义?

UINT8_C宏在“stdint.h”中定义,具有以下specification:宏UINTN_C(value)应扩展为对应于类型uint_leastN_t的整型常量表达式.然而,在野外,实现是不同的:#defineUINT8_C(value)((uint8_t)__CONCAT(value,U))//AVR-libc#defineUINT8_C(x_)(static_cast(x_))//QP/C++#defineUINT8_C(c)c//GNUCLibrary前两个实现看起来大致相同,但第三个实现不同:例如,以下程序打印1使用AVR-libc和QP/C++,但是-1使用glibc(

c++ - 为什么需要一个空的 shared_ptr 以及如何使用它?

在ScottMeyers的EffectiveC++中,第18项使接口(interface)易于正确使用且难以错误使用,他提到了nullshared_ptr:std::tr1::shared_ptrpInv(static_cast(0),getRidOfInvestment)和时尚分配操作pInv=...//makeretValpointtothecorrectobject在哪种情况下可能需要创建一个空的shared_ptr并稍后进行赋值?为什么不只要有资源(原始指针)就创建shared_ptr?由于ScottMeyers没有在前面的示例中显示完整的赋值,我认为shared_ptr的赋值

c++ - 高阶位——把它们变成 uint64_t 变成 uint8_t

假设您有一个uint64_t,并且只关心uint64_t中每个字节的高位。像这样:uint32_t:0000...10000000100000001000000010000000--->00001111有没有比以下方法更快的方法:return(((x>>56)&128)+((x>>49)&64)+((x>>42)&32)+((x>>35)&16)+((x>>28)&8)+((x>>21)&4)+((x>>14)&2)+((x>>7)&1))也就是移位x、屏蔽并为每个字节添加正确的位?这将编译成很多程序集,我正在寻找一种更快的方法......我使用的机器只有SSE2指令,我找不到有用的S

c++ - 关于 shared_ptr 析构函数中实现错误的困惑

我刚看到HerbSutter的演讲:C++andBeyond2012:HerbSutter-atomicWeapons,2of2他展示了std::shared_ptr析构函数实现中的错误:if(control_block_ptr->refs.fetch_sub(1,memory_order_relaxed)==0)deletecontrol_block_ptr;//B他说,由于memory_order_relaxed,delete可以放在fetch_sub之前。At1:25:18-Releasedoesn'tkeeplineBbelow,whereitshouldbe这怎么可能?存在h

c++ - std::list<std::unique_ptr>:空初始化列表与默认构造函数

代码#include#includeclassB;classA{std::list>bs;public:A();~A();};intmain(){Ax;return0;}显然编译。它没有链接,因为A::A()和A::~A()丢失了,但这是预料之中的。改变std::list>bs;应该调用std::list的标准构造函数list():list(Allocator()){}(C++14及以上)到std::list>bs{};应该调用list(std::initializer_list,constAllocator&=Allocator());默认构造函数也是。(感谢NicolBolas,他