草庐IT

std-proposals

全部标签

c++ - `std::pair` `second` 具有不完整的类型与 `unordered_map` 树

我正在审查我的一些旧代码,我看到代码使用指针来实现Variant的树。对象。它是一棵树,因为每个Variant可以包含unordered_map的Variant*.我查看了代码,想知道为什么它不只是使用值,std::vector,和std::unordered_map,而不是Variant*.所以我继续修改它。除了一件事似乎没问题,我得到了errors:/usr/local/include/c++/6.1.0/bits/stl_pair.h:153:11:error:'std::pair::second'hasincompletetype_T2second;///@csecondisa

c++ - 如何使用 clang 和选项 -std=c++11 编译项目,使用 autotools

我正在使用C和C++代码开发软件。我最近在c++11标准中添加了一些代码。在configure.ac我写道:forfin'-std=c++11''-std=c++11-stdlib=libc++'doAX_CHECK_COMPILE_FLAG([$f],[CXXFLAGS="$CXXFLAGS$f"stdpass=true],[],[],[])${stdpass-false}&&breakdoneif!"${stdpass-false}";thenAC_MSG_ERROR([UnabletoturnonC++11modewiththiscompiler])fi使用gcc我没问题,一切顺

C++ 如何将输入值分配给 std::bitset 参数?

我想制作一个简单的程序,它将从输入中获取位数,并作为输出显示二进制数,写在给定的位上(例如:我输入3:它显示000、001、010、011,100,101,110,111)。我遇到的唯一问题是在第二个for循环中,当我尝试在bitsetbits>中分配变量时,但它需要常量数字。如果您能帮助我找到解决方案,我将不胜感激。这是代码:#include#include#includeusingnamespacestd;intmain(){intmaximum_value=0,x_temp=10;//cin>>x_temp;intconstbits=x_temp;for(inti=1;i=0;i

c++ - 一个 std::shared_ptr<> 的 std::tuple<> 不起作用?

我最近发现使用std::tuple有问题只有一个元素。我创建了一个用于类型删除并保留N个引用计数对象的类。但是,如果引用计数对象是std::tuple中唯一的一个,则不会保留它。.我做错了什么吗?classtoken{public:templatetoken(Types...types):_self(std::make_shared>(std::make_tuple(std::move(types)...))){}//WhydoIneedthisspecialversionoftheconstructor?//Uncommentandthecodewillwork!//template

C++。为什么 std::cout << char + int 打印 int 值?

比方说,我们有:charx='a';inty=1;所以,如果你运行:std::cout它打印98而不是'b'。正如我从here看到的那样只有int参数实现。从现在开始我有两个问题:char+int操作后返回什么类型?为什么没有char参数实现,而是std::cout仍然按预期工作并打印char值? 最佳答案 感谢Fefux,BoPersson和MattiVirkkunen答案是:来自CPPReference:Implicitconversions:arithmeticoperatorsdonotaccepttypessmallert

c++ - 在编译时初始化 c++ std::bitset

我正在尝试初始化std::bitset在编译时使用它的一些索引,假设50-75和200-225设置为1。基于http://en.cppreference.com/w/cpp/utility/bitset/bitset看起来我的2个选项是:constexprbitset();constexprbitset(unsignedlonglongval);考虑到第二个构造函数不适用于大索引,有人可以阐明我将如何初始化我的位集吗? 最佳答案 Bitsetconstructorconstexprbitset(unsignedlonglongval

c++ - 减少 C++ 中的 std::regex 编译时间

我正在使用std::regexr("-?[0-9]*(.[0-9]+)?(e-?[0-9]+)?")来验证数字(整数/定点数/float)。MWE如下:#include#include#include#include#includeusingnamespacestd;boolisNumber(strings){//canignoreallwhitespaces.erase(remove(s.begin(),s.end(),''),s.end());std::regexr("-?[0-9]*(.[0-9]+)?(e-?[0-9]+)?");returnregex_match(s,r);}

C++ 使用 std::get_time 解析 YYMMDD ISO 8601 日期字符串给出意外结果?

我正在尝试解析格式为YYMMDD的日期。作为测试,我尝试了以下代码:#include#include#include#includeintmain(){std::tmt={};std::istringstreamss("191203");ss>>std::get_time(&t,"%y%m%d");if(ss.fail()){std::cout使用Coliru、GCC6.1(C++17)进行测试,输出为:SunMar000:00:001912我期望的是:MonDec300:00:002019格式字符串有问题吗? 最佳答案 你可以使用

c++ - 为什么 std::queue 不实现 insert() 而 std::deque 实现?

我正在阅读std::queue我想知道为什么没有方法可以通过一次操作有效地插入多个元素,而std::deque报价std::deque::insert? 最佳答案 Insert允许插入到结构中的任意位置。std::queue是FIFO结构的抽象接口(interface)。你只能在最后添加东西。底层结构不一定具有插入任意位置的有效方法(例如考虑std::vector)。因此std::queue没有通用的插入成员函数。由于一般的插入函数需要迭代器位置参数,提供多重插入是为了方便,这样您就不必跟踪下一个迭代器位置。推回不需要这个,因为不需

c++ - std::shared_ptr<std::string const> 能否作为引用计数不可变字符串的有效实现?

理想情况下,不可变字符串类只需要为每个字符串分配一个内存。甚至引用计数也可以存储在与字符串本身相同的内存块中。string的简单实现和shared_ptr将为shared_ptr分配三block不同的内存:字符串缓冲区的内存字符串对象的内存引用计数的内存现在,我知道在使用std::make_shared()时,智能实现可以将最后两个组合成一个分配。但这仍然会留下两个分配。当您知道字符串是不可变的时,字符串缓冲区将不会被重新分配,因此应该可以将它与字符串对象集成在一起,只留下一次分配。我知道一些字符串实现已经对短字符串使用了这样的优化,但我正在寻找一个不管字符串长度如何都这样做的实现。我