草庐IT

c++ - 从 c++11 中的用户定义文字返回 std::array

我刚刚安装了gcc-4.8.1,当我意识到我可以执行-std=c++1y并获得多行constexpr时,我非常兴奋。我很想知道,是否有办法使这项工作正常进行?#includeconstexprautooperator""_a1(constchar*text,constsize_tsize)->std::array{std::array()blah;std::strncpy(blah.data(),test,size);//dosomestufftoblahatcompiletimereturnblah;}intmain(){autoblah="helloworld"_a2;}但是我变得

c++ - x86_64 和 ARM 上的原子 CAS 操作是否始终使用 std::memory_order_seq_cst?

作为AnthonyWilliamssaid:some_atomic.load(std::memory_order_acquire)doesjustdropthroughtoasimpleloadinstruction,andsome_atomic.store(std::memory_order_release)dropsthroughtoasimplestoreinstruction.众所周知,在x86上,操作load()和store()内存屏障memory_order_consume,memory_order_acquire,memory_order_release,memory_o

c++ - 有没有一种 C++ 方法可以使用 iostream 来格式化地址和指针?

我有类似的东西unsignedx=16;unsigned*p=&x;std::cout输出:0000000000000010000x7fffc35ba784ostream::operator 最佳答案 像这样使用internal:#include#includeintmain(){unsignedx=16;unsigned*p=&x;std::cout这给出:0000000000000010000x7fffd123c1a40x007fffd123c1a4 关于c++-有没有一种C++方法

c++ - 修改参数的函数的完美返回

对模板函数中的完美转发进行了广泛的讨论,以允许将左值或右值参数作为参数有效地传递给其他函数。但是,我找不到关于完美返回或等价的完美传递的讨论。(相关问题Perfectpass-through没有完全解决这个问题。)考虑一个函数修改范围并且应该返回修改后的范围的情况。我们需要两个单独的函数来有效地处理左值和右值参数的情况://Givenareferencetoanlvaluerange,returnareferencetothesamemodifiedrange.//(Thereisnoallocationormove.)templateT&sortr(T&r){std::sort(st

c++ - std::initializer_list 作为构造函数的模板参数

考虑一个从std容器继承的类,该类具有调用容器底层构造函数的模板构造函数。此模板构造函数适用于简单的复制和移动构造函数,但不适用于initializer_list构造函数。templateclasstest:publiccontainer_T{public:usingcontainer_type=container_T;test(){}//templatedconstructortemplatetest(Tt):container_T(t){}//withoutthisitwon'tcompiletest(std::initializer_listl):container_T(l){}

c++ - 构造函数不能采用非常量引用

我有以下类(class):classFoo{public:explicitFoo(std::vector&functionCalls){}};typedefboost::shared_ptrFooPtr;我尝试这样使用:std::vectorfunctionCalls;FooPtrfoo=boost::make_shared(functionCalls);我在VS20012中编译良好,但在gcc4.3.4中无法编译。这是编译器错误:boost/boost_1_54_0/boost/smart_ptr/make_shared_object.hpp:Infunction'typenameb

c++ - 从 std::string 中提取整数

我正在编写简单的OBJ加载器,我遇到了下一个问题-我必须从下一个std::string中提取整数:fv0/vt0/vn0v1/vt1/vn0...vk/vtk/vnk其中vk、vtk、vnk都是int值,/和值之间没有空格组与组之间只有一个空格。由于文件可能非常大,而且这种类型的行可能出现超过100000次,我需要一种有效的方法来从像这样的字符串中提取整数。编辑:正如Jesse所问,这是我目前的方法(我假设数据格式正确!):intp,t,n;constchar*l=line.c_str()+2;for(intvIndex=0;l&&sscanf(l,"%d/%d/%d",&p,&t,&

c++ - 将可变参数模板参数转发给多个类成员

以下安全吗?不会std::string是moved在第一类成员初始化之后?打印出来没问题,但我不确定。templateclassTest{public:templateTest(Args&&...args):m_one(newT(std::forward(args)...)),m_two(newT(std::forward(args)...))//m_one;std::unique_ptrm_two;};classC{public:C(inta,intb,conststd::string&c):m_a(a),m_b(b),m_c(c){std::coutt(1,2,"3");}我想这没

c++ - 为什么我不能按值将右值 std::stringstream 传递给函数?

为什么这段代码不能编译?#includevoidf(std::stringstream){}intmain(){f(std::stringstream{});}我收到这个错误:error:useofdeletedfunction‘std::basic_stringstream::basic_stringstream(conststd::basic_stringstream&)’f(std::stringstream{});^如果我将std::stringstream替换为另一种不可复制的类型,它就可以正常工作。这不应该使用stringstream的move构造函数吗?

c++ - 为什么 std::copy 或 std::swap 不需要 <algorithm>?

根据这个cplusplus.com页,std::copy在header,原样std::swap然而这有效:#include//std::cout#include//std::vector#include//std::ostream_iterator()#include//rand(),srand()//NOTincludingintmain(){srand(time(NULL));constintSIZE=10;std::vectorvec;for(inti=0;i(std::cout,""));std::cout我唯一能想到的是它们是由导出的也...但是为什么我们需要标题吗?