草庐IT

-std=gnu99

全部标签

c++ - std::chrono::duration 的运算符/和带有 clang 的自定义类型

考虑一个自定义类型,它用于乘除持续时间的特定实例:#include#includeclassFoo{};usingDuration=std::chrono::seconds;inlineDurationoperator*(Durationd,Foo){std::cout此代码使用gcc编译时没有警告,但使用clang(wandbox)时失败Infileincludedfromprog.cc:1:/opt/wandbox/clang-7.0.0/include/c++/v1/chrono:1259:81:error:notypenamed'type'in'std::__1::common

c++ - 为什么 std::get 不适用于变量?

我在理解函数(尤其是模板函数和局部变量)在编译期间的行为时遇到了麻烦。因此这段代码适用于std::get:enumclassUserInfoFields{name,email,address};usingUserInfo=std::tuple;intmain(){UserInfos{"Edmund","edmund@page.me","Denverstreet19"};std::cout(UserInfoFields::name)>(s)据我了解这是因为std::get是一个模板函数,它需要在编译期间知道一个模板参数。这是有道理的static_cast在编译期间给我们值。我不明白,如果

c++ - 在 C++ 中,std::multiset 是否保持稳定的排序顺序?

假设我有两个比较相同的项目a和b。所以a我查了几个引用资料,但找不到答案。我很想认为没有任何保证,这取决于每个特定的实现。谢谢。 最佳答案 Thisthread暗示当前标准不保证它,但所有已知的当前实现都满足它,并提供指向包含保证的C++0x标准草案的链接。 关于c++-在C++中,std::multiset是否保持稳定的排序顺序?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/

c++ - 变体 bstr 到 std::string 转换的默认编码

我有一个从MSXMLDOM中提取的变体bstr,所以它是UTF-16格式的。我试图找出此转换发生的默认编码:VARIANTvtNodeValue;pNode->get_nodeValue(&vtNodeValue);stringstrValue=(char*)_bstr_t(vtNodeValue);根据测试,我认为默认编码是Windows-1252或Ascii,但我不确定。顺便说一句,这是我正在修复并将变体转换为wstring并通过调用WideCharToMultiByte进行多字节编码的代码块。谢谢! 最佳答案 operator

c++ - 在 std::map 中使用(数学) vector

相关:whatcanIuseasstd::mapkeys?我需要创建一个映射,将空间中的特定关键位置映射到对象列表。std::map似乎是这样做的方法。所以我输入了std::map在xyz上VectorclassVector{floatx,y,z};,我正在制作std::map>.所以请注意这里的key不是std::vector,它是classVector的一个对象这只是我自己制作的数学xyzvector。为了产生“严格弱排序”,我为operator编写了以下重载:boolVector::operator=b.yreturnfalse;}}else{//z>=b.zreturnfals

c++ - Eclipse 内容辅助无法识别 std::thread,但可以正确编译

我正在运行Ubuntu14.04。我重现的步骤:创建一个新的C++项目(新建->C++->HelloWorld项目),我将其命名为TestStdThread将主文件中的代码更改为:#include#includeintmain(){std::cout转到TestStdThread->Properties->C/C++Build->Settings->GCCC++Compiler,并将Command选项从g++更改为g++-std=c++11转到TestStdThread->Properties->C/C++Build->Settings->GCCC++Compiler->Include

c++ - 使用 std::swap 而不是使用 '=' 运算符进行赋值

我正在查看一些C++源代码fromalibrary与我正在从事的宠物项目有关,遇到了一些我不明白的事情。在我期望指针取消引用然后赋值的地方,库作者在函数末尾附近使用std::swap()来写入结果:std::swap(*out,result);我希望看到这样的东西:*out=result;请注意,result是size_t的typedef,out是指向同一类型的指针。当谈到“系统编程”时,我的背景是C和C#,但对C++的了解并不多。这种“分配”有什么特别的原因吗? 最佳答案 当值类型更有趣时,例如std::vector,例如,std

c++ - std::this_thread::sleep_for() 可以有虚假唤醒吗?

请注意,这不是关于std::condition_variable::wait_for()的问题。我知道这可能会虚假唤醒。我的程序的行为表明这个问题的答案是肯定的,但是STL文档对于condition_variable的情况非常清楚。至少在cppreference.com,this_thread的正确答案似乎是否。编译器是gcc4.8.1,以防这是一个缺陷。 最佳答案 C++标准的相关部分(第[thread.thread.this]/7-9段)没有提及任何关于std::this_thread::sleep_for的虚假唤醒,不像例如对

c++ - 为什么小于运算符接受不同类型的参数而 std::min 不接受?

#includeintmain(){inta=1;longlongb=2;std::cout>Infileincludedfrom/usr/include/c++/4.8/bits/char_traits.h:39:0,>from/usr/include/c++/4.8/ios:40,>from/usr/include/c++/4.8/ostream:38,>from/usr/include/c++/4.8/iostream:39,>fromsum_to.cpp:1:/usr/include/c++/4.8/bits/stl_algobase.h:239:5:note:template

c++ - 迭代 std::set 如何返回排序结果

容器std::set(或std::map)是STL提供的一种数据结构。在几乎所有的编译器中,它都被实现为一个R&B树,保证了log(n)的插入、查找和删除时间。https://en.wikipedia.org/wiki/Red%E2%80%93black_tree在红黑树中,元素根据存储元素的“less”运算符进行排序。所以基本上如果一个根是N+1,N将在左子树上,而N+2将在右子树上,这个顺序将由less运算符决定。我的问题是在执行以下代码时:set::iteratorit;for(it=myset.begin();it!=myset.end();it++){cout元素按排序顺序返