草庐IT

-std=gnu99

全部标签

c++ - std::unique_ptr 删除函数,initializer_list - 驱动分配

全部,当我使用初始化列表格式实例化小部件数组时,指向成员变量小部件实例的裸指针可以编译,但在更改为std::unique_ptr后,gcc会给出有关已删除函数的编译错误。$uname-aLinux..3.5.0-21-generic#32-UbuntuSMP2012年12月11日星期二18:51:59UTCx86_64x86_64x86_64GNU/Linux$g++--versiong++(Ubuntu/Linaro4.7.2-5ubuntu1)4.7.2此代码给出以下编译器错误:#include#includeclassWidget{public:Widget(){}};class

c++ - Boost 1.53 本地日期时间编译器错误 -std=c++0x

使用g++版本4.7.2,如果我尝试编译以下内容#includeclassBar{public:Bar(){tz_db_.load_from_file("/home/date_time_zonespec.csv");}private:boost::local_time::tz_databasetz_db_;};intmain(){return0;}使用-std=c++0x我得到以下错误。Infileincludedfrom/usr/local/include/boost/date_time/local_time/local_time_types.hpp:18:0,from/usr/lo

c++ - 从 ‘void’ 到非标量类型的转换‘std::pair<std::basic_string<char, std::char_traits<char>

我在电子表格obj中有一堆对:std::stack>undoStack;我正在尝试弹出堆栈并将其分配给另一对:std::pairchange=spreadsheets.at(i).undoStack.pop();我收到这个错误:error:conversionfrom‘void’tonon-scalartype‘std::pair,std::allocator>,std::basic_string,std::allocator>>’requested这里出了什么问题? 最佳答案 stack::pop()返回void但您正试图将其分配

c++ - 使用迭代器将 std::vector 附加到它自己的元素

以下代码按预期工作(测试通过),但我想知道以这种方式使用迭代器在C++中是否被认为是一种不好的做法,或者它是否可以。也许这是特定于std::vector和其他集合的行为不同并且最佳实践因集合(甚至它们的实现)而异?在其他语言中肯定不行,而且大多数时候更改集合会使迭代器无效并抛出异常。BOOST_AUTO_TEST_CASE(ReverseIteratorExample){std::vectormyvector;for(inti=0;iresultVector(resultset,resultset+sizeof(resultset)/sizeof(resultset[0]));BOOS

c++ - std::initializer_list 的底层结构是什么?

第一部分:std::initializer_list是C++11的一个非常有用的特性,所以我想知道它是如何在标准库中实现的。从我读到的here,编译器创建一个T类型的数组并给出指向initializer_list的指针.它还声明复制initializer_list将创建一个引用相同数据的新对象:为什么会这样?我会猜到它要么:为新的initializer_list复制数据将数据的所有权转移到新的initializer_list第二部分:来自std::vector的众多在线引用资料之一构造函数:vector(initializer_listil,constallocator_type&al

c++ - std::find 的优点

与容器的find方法相比,使用C++11的std::find有什么优势吗?在std::vector的情况下(没有find方法)std::find使用一些智能算法或简单地迭代每个元素的天真方法?在std::map的情况下,您似乎需要传递一个std::pair,即value_typestd::map的。这似乎不是很有用,因为通常您希望查找键或映射元素。std::list或std::set或std::unordered_set等其他容器呢? 最佳答案 Inthecaseofstd::vector(whichdoesnothaveafind

c++ - 为什么转换函数不适用于 std::string?

考虑以下包含std::string类型转换函数的类:classSomeType{public:SomeType(char*value){_str=value;}operatorstd::string(){returnstd::string(_str);}private:char*_str;};以下代码片段无法编译并出现错误:没有运算符“==”匹配这些操作数intmain(intargc,char*argv[]){SomeTypea("test");if(a==std::string("test"))//ERRORonthisline{intdebug=1;}return0;}我意识到我

c++ - 如何在转换运算符中使用 std::enable_if?

基本上我希望我的范围类型可以从Range隐式转换至Range.std::enable_if似乎是不可能的,因为该函数不带任何参数并且没有返回值。解决办法是什么?这基本上是我尝试过的:templateclassRange{T*begin_;T*end_;public:Range(T*begin,T*end):begin_{begin},end_{end}{}templateRange(T(&a)[N]):begin_{static_cast(&a[0])},end_{static_cast(&a[N-1])}{}T*Begin(){returnbegin_;}T*End(){return

c++ - 为什么 std::vector 这么快(或者我的实现太慢了)

前几天我在玩游戏,想看看我能优化到什么程度。我决定从一个简单的map开始,它只进行线性搜索以查找元素是否存在,然后尝试优化其中的大部分内容。此外,为了进行比较,我使用std::find对std::map和std::vector执行相同的操作。map的结果是预期的,创建和销毁比我的map慢,但速度快得多(实际上,我一直无法测量它,它总是返回0)。问题在于std::vector。我预计它会比我的实现慢,但事实并非如此,而且我真的不明白它怎么可能相同或更快,因为我的实现跳过了最坏的情况(值不在vector中)并且是使用结果缓存。任何人都可以在这里阐明一些问题吗?我知道STL背后的家伙是半神,

c++ - 如何使用 std::stoi 作为默认值创建 std::function 作为方法参数?

我想使用std::function作为方法的参数,并将其默认值设置为std::stoi。我尝试了以下代码:voidtest(std::functioninFunc=std::stoi)不幸的是,我收到以下错误:noviableconversionfrom''to'std::function'我设法通过添加创建专用方法进行编译。#include#includeintmy_stoi(conststd::string&s){returnstd::stoi(s);}voidtest(std::functioninFunc=my_stoi);第一个版本有什么问题?难道不能使用std::stoi作