草庐IT

-std=gnu99

全部标签

c++ - std::unordered_map 指针/引用失效

我有以下代码:std::unordered_mapmap;map["k1"]="v1";auto&v1=map["k1"];map["k2"]="v2";看完http://en.cppreference.com/w/cpp/container/unordered_mapNotesTheswapfunctionsdonotinvalidateanyoftheiteratorsinsidethecontainer,buttheydoinvalidatetheiteratormarkingtheendoftheswapregion.Referencesandpointerstoeitherk

C++ 将 std::function 对象传递给可变参数模板

我想将一个可调用对象(std::function对象)传递给一个类Foo.可调用对象引用另一个具有任意参数的类的成员方法,因此Foo必须是可变参数模板。考虑这段代码:structBar{voidMemberFunction(intx){}};templateclassFoo{public:Foo(std::functionf){}};intmain(){Foom1(&Bar::MemberFunction);return0;}这编译得很好。现在我想写一个工厂函数MakeFoo()返回unique_ptr到Foo对象:templatestd::unique_ptr>MakeFoo(std

c++ - 最令人烦恼的解析阻止了类内初始化 std::vector<int>

这个问题在这里已经有了答案:Whycan'tmemberinitializersuseparentheses?(2个答案)关闭4个月前。C++11允许类内初始化:structFoo{std::vectorv{3};//vectorof3emptystrings};如果我们想在类中初始化一个intsvector,我们会得到其他东西:structFoo{std::vectorv{3};//vectorofoneelementwithvalue3};这个问题好像是语言的限制,asdiscussedinpreviousquestions.但是,如果这不是类内初始化,我们将能够使用圆括号而不是大

c++ - std::regex——是否有一些需要链接的库?

我收到以下代码的链接器错误:#includeintmain(){std::regexrgx("ello");return0;}test.o:Infunction`basic_regex':/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/tr1_impl/regex:769:undefinedreferenceto`std::basic_regex>::_M_compile()'collect2:ldreturned1exitstatus 最佳答案

c++ - constexpr std::array with static_assert

#include#includeintmain(intargc,char**argv){constexprconststd::arrayarr{{0,1}};constexprconstintarr2[]={0,1};static_assert(arr[0]==arr2[0],"asdf");static_assert(arr[1]==arr2[1],"asdfasdf");return0;}当使用gcc4.8.2和4.9.1使用g++test.cpp--std=c++11编译时,编译成功。但是,当使用clang++test.cpp--std=c++11使用clang3.4和3.5编译

c++ - 如何使用不同类型的键搜索 std::map

如果我有std::map,使用Y的实例在map中查找匹配项目的最佳方式是什么??假定Y中的信息足以唯一地找到X,但出于性能原因,我不想创建X的实例通过复制Y值(value)观。我意识到我可以通过为X创建一个公共(public)基类或接口(interface)来做到这一点和Y并将其设为map键,但还有其他方法吗?例如创建某种比较器对象?为清楚起见,这里是示例代码:classX{public:intid;intsubId;};std::mapdetailsMap;classY{public:intgetId();intgetSubId();intsomeOtherUnrelatedThin

c++ - 为什么在 std::vector 的初始化列表中调用复制构造函数?

我有以下非常简单的类:classFoo{public:Foo(){}Foo(constFoo&)=delete;Foo(Foo&&){}voidoperator=(constFoo&)=delete;voidoperator=(Foo&&){}voiddump()const{}};该类是可move构造和可赋值的,但不是可复制构造和可赋值的。我想使用vector的初始化列表来初始化Foo元素的vector。std::vectorvf={Foo()};编译器会报错,因为代码必须使用已删除的复制构造函数。谁能解释一下,为什么在这种情况下不使用move构造,为什么需要对象的拷贝?以下也需要复制

c++ - std::iostream 是非阻塞的吗?

根据Boost.Iostreams的提升引用(在第3.6节中,最底部):http://www.boost.org/doc/libs/1_64_0/libs/iostreams/doc/index.htmlAlthoughtheBoost.IostreamsFilterandDeviceconceptscanaccommodatenon-blockingi/o,theC++standardlibrarystreamandstreambufferinterfacescannot,sincetheylackameanstodistinguishbetweentemporaryandperma

c++ - 在 map 中使用 unique_ptr 时删除 std::pair 中的函数

我有一段C++代码,我不确定它是否正确。考虑以下代码。#include#include#includeusingnamespacestd;intmain(intargc,char*argv[]){vector>>v;v.resize(5);returnEXIT_SUCCESS;}GCC编译这段代码没有问题。然而,英特尔编译器(版本19)因错误而停止:/usr/local/[...]/include/c++/7.3.0/ext/new_allocator.h(136):error:function"std::pair::pair(conststd::pair&)[with_T1=cons

c++ - constexpr std::optional 重置

我正在审查C++-17std::optional类模板的接口(interface),并注意到reset和assignment来自nullopt的未标记为constexpr。这是一个疏忽还是无法将此操作标记为constexpr的原因? 最佳答案 有一个原因,就是[expr.const]以前禁止:anassignmentexpressionorinvocationofanassignmentoperator([class.copy])thatwouldchangetheactivememberofaunion;由于P1330:Chang