草庐IT

-std=gnu99

全部标签

c++ - 从 std::vector 打印逗号分隔列表

这个问题在这里已经有了答案:HowcanIprintalistofelementsseparatedbycommas?(33个答案)关闭2年前。我正在尝试打印std::vector中单个详细信息的逗号分隔列表.到目前为止,我见过的最简单、最聪明的方法是使用std::ostringstreamss;std::copy(vec.begin(),vec.end()-1,std::ostream_iterator(ss,","))ss当我打印一个字符串vector时,它工作得很好。但是,现在我正在尝试打印有关MyClass的单个详细信息.我知道在Python中我可以做类似的事情(x.speci

c++ - 为什么我不能将 boost::function 存储在 std::list 中?

我得到以下编译错误:error:expected`;'before'it'"这是我的代码:#include#includetemplatevoidexample(){std::list>::iteratorit;}为什么会这样?我该如何解决? 最佳答案 您需要将typename放在该行的前面,因为您执行::iterator的类型取决于模板参数T。像这样:templatevoidexample(){typenamestd::list>::iteratorit;}考虑这条线std::list>::iterator*it;这可能意味着乘法

c++ - union 成员可能没有构造函数,但是 `std::pair` 可以吗?

union成员可能没有析构函数或构造函数。所以我不能模板化以下类Foo靠我自己MyClass如果MyClass有一个构造函数:templatestructFoo{Tval;Foo(Tval_):val(val_){}size_thash()const{union{Tf;size_ts;}u={val};returnu.s;}};structMyClass{boola;doubleb;MyClass(boola_,doubleb_):a(a_),b(b_){}};如果我这样做,我会得到这个错误:member'MyClassFoo::hash()const[withT=MyClass]::

c++ - 迭代 std::vector 的面向对象的方法?

我有一个类,它有一个std::vector子控件指针。出于显而易见的原因,我不希望类的用户直接访问std::vector。我想要的只是一种为调用者提供指针的方法。什么是好的OO方法来做到这一点?(这个函数会经常被调用)谢谢 最佳答案 提供一个函数,返回一个const_iterator给vector。加一返回迭代器到vector的末尾也很有用。classMyClass{public:typedefvector::const_iteratorc_iter;c_itergetBegin()const{returnv.begin();}c_

c++ - std::is_const 将 const 指针标识为非常量

我很困惑std::is_const识别const的行为指针为非const.我自己的实现is_const做完全一样的事情。我不确定为什么更通用的模板化结构正在挑选版本。gcc4.7和clang3.1-svn表现出相同的行为。任何人都可以解释发生了什么事吗?代码如下:#include#include#includeclassCEmptyClass{};namespacejbc{templatestructis_const:std::false_type{};templatestructis_const:std::true_type{};}intmain(intargc,char*argv[

C++ 异常:为什么要使用或扩展 std::exception?

根据thissite抛出字符串或整数非常有用。我发现这非常干净且易于理解。throw"descriptionofwhathappened"而不是throwstd::runtime_error("descriptionofwhathappened")有什么缺点? 最佳答案 那个网站很愚蠢,教的是糟糕的设计。如果您抛出int或char*,那么您将不得不使用int或char*捕获它>只有。您可以使用const对其进行限定。如果您抛出std::runtime_error,那么您可以使用std::runtime_errorconst&或其基类

c++ - 在 std 命名空间中添加模板特化

背景:我试图回答这个问题Whyisn'tmyoverloading.我的建议之一(除了使用谓词之外)是移动自定义operator对于std::string在命名空间std中,以便编译器可以优先于模板化版本。答案以闪电般的速度被否决,一位知名用户发表了以下评论:Thisisundefinedbehaviour,youarenotallowedtoadddeclarationstonamespacestdbecauseitcanchangethebehaviourofthestandardlibrarycomponens我的问题:是否可以为STL类型添加模板特化,即使该特化的声明不包含用户

c++ - push_back 与 emplace_back 到 std::vector<std::string>

类似的问题存在于here和here但我认为我们还没有得到明确的答案然后我重新提出问题。C++11标准有两种在vector末尾添加新元素的方法,它们是std::vector::push_back和std::vector::emplace_back.它们之间的区别在于std::vector::emplace_back就地构造对象而std::vector::push_back基本上复制对象(或原语类型)或将其移动到vector的末尾。然后std::vector::push_back看起来是将原始类型添​​加到std::vector中的更好选择。例如:std::vectorvVec;vVec.

c++ - 使用 QString 作为 std::unordered_map 中的键

我正在尝试使用QString作为std::unordered_map中的键,但是我得到了错误:errorC2280:'std::hash::hash(conststd::hash&)':attemptingtoreferenceadeletedfunction我无法切换到QHash,因为映射的值类型是不可复制的。有什么方法可以使它起作用吗? 最佳答案 将hash实现放在header中,并确保在使用map的所有地方都包含该header。转发到qHash的简单实现应该就足够了:#include#include#includenamesp

c++ - 即使正确使用 make_shared,shared_from_this() 也会导致 std::bad_weak_ptr

我正在使用独立的Asio和C++11创建一个C++服务器应用程序,但遇到错误,这就是我寻求帮助的原因。错误在类里面worker_thread,在通话期间shared_from_this(),一个bad_weak_ptr引发异常,导致程序崩溃。布局类(class)connection_manager创建并存储std::shared_ptr类型的对象在std::vector里面容器类(class)worker_thread继承自std::enable_shared_from_this.类(class)worker_thread创建std::shared_ptr类型的对象.类(class)c