草庐IT

rdbg_std_amd

全部标签

c++ - std::get() 如何与 std::tuple 一起工作?

尝试制作std::get(std::tuple)之后我自己的方法,我不太确定它是如何被编译器实现的。我知道std::tuple有一个这样的构造函数:tuple(Args&&...args);但是args...到底是什么?分配给?我认为这对于了解如何使用很有用std::get()有效,因为需要将参数放在某个地方才能访问它们。 最佳答案 这是tuple的粗略玩具实现-喜欢上课。首先,一些元编程样板,用于表示整数序列:templatestructseq{};templatestructmake_seq:make_seq{};templat

c++ - 为什么输出带有转换运算符的类不适用于 std::string?

Thisworks,printing1:#includestructInt{inti;operatorint()constnoexcept{returni;}};intmain(){Inti;i.i=1;std::cout然而,thisfailstocompileonGCC4.8.1:#include#includestructString{std::strings;operatorstd::string()const{returns;}};intmain(){Strings;s.s="hi";std::cout以下是错误的相关部分:error:nomatchfor‘operators

c++ - 为什么 std::vector 需要 operator =

我有一个关于我们可以存储在vector中的类的问题。可以存储在vector中的要求是什么?似乎这样的类必须有赋值运算符。但我不确定是否仅此而已。让我举个例子。A类有constint成员。如果我不写operator=,它就不会编译。但是在这个例子中,这个操作符什么都不做。该程序正确显示10和20。看起来operator=是必需的,但实际上并没有使用。#include#includeclassA{public:A(inta):a_(a){}A&operator=(constA&a2){return*this;}//Withoutthis,compilefails.voidprint()co

c++ - C++11 可以判断 std::thread 是否处于事件状态吗?

令我惊讶的是,一个已完成执行但尚未加入的C++11std::thread对象仍然是considered一个活跃的执行线程。以下代码示例对此进行了说明(基于Xubuntu13.03和g++4.7.3)。有谁知道C++11标准是否提供了一种方法来检测std::thread对象是否仍在主动运行代码?#include#include#include#include#includeintmain(){autolambdaThread=std::thread([](){std::cout 最佳答案 不,我不认为这是可能的。我也会尝试考虑您的设计

c++ - 如何在 std::set 中存储指向对象的指针(或引用)

在C++11STL中是否有适当的方法将对象指针存储在std::set中?,并让它们按对象的operator正确排序方法?当然,我也可以自己编写Compare输入并将其传递给set作为它的第二个模板参数,但我想STL会提供一种更方便的方法。谷歌搜索显示std::reference_wrapper,在我看来应该允许这样的代码:#include#includestructT{intval;booloperatorval>s;Ta{5};s.insert(a);}但实际上,这会导致编译错误:clang++-std=c++11-Wall-Wextra-pedantictest.cpp-otest

c++ - std::unique_ptr::reset 检查托管指针是否为空?

我一直在阅读有关C++11智能指针的内容,以便在我的源代码中使用它们,我一直在阅读的文档是cppreference.com上的文档;在阅读std::unique_ptr时,在resetfunction上有一个文档对我来说似乎不正确(强调我的):Replacesthemanagedobject.Givencurrent_ptr,thepointerthatwasmanagedby*this,performsthefollowingactions,inthisorder:Savesacopyofthecurrentpointerold_ptr=current_ptr.Overwritest

c++ - Boost.Spirit 编译器无法识别 std::pair

#include#includenamespaceqi=boost::spirit::qi;intmain(){//thefollowingparses"1.02.0"intoapairofdoublestd::stringinput("1.02.0");std::string::iteratorstrbegin=input.begin();std::pairp;qi::phrase_parse(strbegin,input.end(),qi::double_>>qi::double_,//parsergrammarqi::space,//delimitergrammarp);//at

c++ - 为什么 std::allocator<>::deallocate() 有一个未使用的 size_type 参数?

使用std::allocator时,deallocate函数需要pointer参数,和一个size_type参数(std::allocator::deallocate(std::allocator::pointerp,std::allocator::size_type)。但是,没有使用size_type,也不是可选的。那么为什么它在那里?这让我很困惑,因为它应该是可选的,甚至不在那里,因为它没有在函数中使用.编辑:MSVC的分配器实现deallocatevoiddeallocate(pointer_Ptr,size_type){//deallocateobjectat_Ptr,igno

c++ - 为什么 std::function 的初始化器必须是 CopyConstructible?

根据http://en.cppreference.com/w/cpp/utility/functional/function/function,初始化器的类型,即形式(5)中的F,应该满足CopyConstructible的要求。我不太明白这个。为什么F不能只是MoveConstructible? 最佳答案 std::function在内部使用类型删除,因此F必须是CopyConstructible,即使您正在使用的特定std::function对象从未被复制。类型删除工作原理的简化:classFunction{structConc

c++ - std::shared_ptr<T>:指向 T 的右值指针的隐式构造函数

我非常支持制作std::shared_ptr的想法接受T*的构造函数明确的。当您正在寻找堆损坏的原因时,它有助于避免不眠之夜。ScottMeyers对此给出了很好的解释。但是……如果我给它一个rvalue这不是明确的指针吗?我可以做这样的事情:///(1)std::shared_ptrt=newT;或///(2)T*giveaway=newT;std::shared_ptrt=std::move(giveaway);或者现实生活中更痛苦的案例///(3)voidfoo(std::shared_ptrt);///...foo(newT);对于我来说,所有这些案例都足够明确了。案例(1)是