草庐IT

int_types

全部标签

c++ - 什么时候使用迭代器的 `value_type`?

我试图了解何时实际使用了iterator::value_type。因为,迭代器的所有运算符,似乎只使用iterator::pointer和iterator::reference。问题iterator::value_type是否真的用于某些事情?附加问题:迭代器是否继承自std::iterator提出一些语义问题?编辑:要理解我为什么问这个问题,是因为我正在为一种类型的迭代器工作,pointer和reference是代理类。 最佳答案 我可以考虑在通用代码中使用它。假设您在C++11中编写一个对范围求和的通用函数。你可以把它写成tem

c++ - 提升精神 x3 int32 | double_ 无法解析 double

我正在尝试编写一个解析器,它解析int32_t或double.作为第一次尝试,我编写了这个解析器:constautoint_or_double=boost::spirit::x3::int32|boost::spirit::x3::double_;我希望得到一个boost::variant解析器成功解析了类似12,100,-42,7的整数但它无法解析像13.243,42.7,12.0-10000.3这样的double这是一个直播demo为什么这个解析器在double上失败? 最佳答案 您的问题与thisquestion非常相似.当整

c++ - 在具有一个元素的列表上强制 std::vector 重载而不是 int 重载

考虑下面的代码:#include#includevoidf(std::vectorv){std::coutLiveonColiru我有点惊讶地发现在这种情况下正在拾取int重载,即程序的输出是:voidf(int)警告warning:bracesaroundscalarinitializer[-Wbraced-scalar-init]f({42});当然,只有当我将1元素列表作为参数传递时才会发生这种情况,否则std::vector正在拾取过载。为什么是{42}被视为标量而不是初始化列表?有没有办法强制编译器选择std::vector即使在1元素列表上也会重载(没有明确构造std::v

c++ - `size_t` 总是 `vector<int>::size_type` 或任何其他容器类型的别名吗?

让我们举一个最简单的例子:公式1:std::vectorvec;//add10E11elementsfor(std::size_tn=0;n公式2:std::vectorvec;//add10E11elementsfor(std::vector::size_typen=0;n当然,unsignedint或任何不合适的数据类型在这里都不起作用,我们必须编译x64。我的问题是:在任何情况下,第一个公式是否会导致问题,或者我们是否可以安全地始终以这种更短的表示法来编写它?如果它们很容易覆盖(x86、任何其他容器、size_type的其他应用程序),我也会对类似的设置感兴趣。

c++ - char_traits<char16_t>::int_type 的大小不够大吗?

考虑以下程序:#include#include#includeintmain(int,char**){std::basic_stringstreamstream;stream.put(u'\u0100');std::cout输出是:Bad:0Bad:0Bad:1设置badbit的原因似乎是因为如果字符等于std::char_traits::eof(),'put'设置badbit。我现在不能再投入流中了。在http://en.cppreference.com/w/cpp/string/char_traits它指出:int_type:anintegertypethatcanholdallv

c++ - 为什么我不能使用与 'const int*' 相同的 'const char*' 创建一个 int 数组?

为什么我可以用这种方式创建一个字符串或字符数组:#includeintmain(){constchar*string="Hello,World!";std::cout?并且它正确输出第二个元素,而如果没有数组的下标符号[]我就不能创建整数类型的数组?char的一个和这个有什么区别:constint*intArray={3,54,12,53};。 最佳答案 “为什么”是:“因为字符串文字很特殊”。字符串文字存储在二进制文件中,作为程序本身的常量部分,constchar*string="Hello,World!";只是将文字视为存储在别

c++ - 无法将类型 'int&' 的非常量左值引用绑定(bind)到类型 'int' 的右值

以下代码编译失败:#includeusingnamespacestd;intadd2(constint&x){returnx+2;}templateTadd2T(T&&x){returnadd2(std::forward(x));}intmain(intargc,char**argv){intx=0;cout通过这条消息:main.cpp:Ininstantiationof'Tadd2T(T&&)[withT=int&]':main.cpp:26:20:requiredfromheremain.cpp:12:16:error:cannotbindnon-constlvaluerefer

c++ - 调用对象类型 'void (B::*)(int)' 不是函数或函数指针

我正在尝试将方法作为函数参数传递。这是一个简化的示例,它返回一个我不理解的编译错误classB{private:intj;public:voidfoo(inti){std::coutj编译时用g++-std=c++11b.cpp-ob我明白了b.cpp:22:50:error:calledobjecttype'void(B::*)(int)'isnotafunctionorfunctionpointervoidcall(void(B::*fun)(inti),inti){b.*fun(i);}~~~^b.cpp:31:12:error:calltonon-staticmemberfun

c++ - 将 std::type_index 作为模板参数传递给函数模板

考虑以下代码(工作正常):namespacefruit{structapple{};}namespacelanguage{structenglish{};}typedefstd::pairmyPairType;std::unordered_mapmyMap={{"paul",{"likes",std::type_index(typeid(fruit::apple))}},{"jonas",{"likes",std::type_index(typeid(language::english))}}};现在我有以下功能模板:templatevoidGenerateProfile(void*d

c++ - std::less<int> 的正确参数类型是什么?

我正在制作一个类——一个BST——它可以比较模板化节点,这需要一个比较器,例如std::less。树是这样的:templateclasstree{private:comparatorcompare;public:explicittree(comparatorfunctor);};但我似乎找不到应该在我的应用程序中输入哪种模板类型。treemy_bst(std::less);error:wrongnumberoftemplatearguments(1,shouldbe2)bst::treemy_bst(std::less);这是有道理的,因为我的模板类型不完整。我应该如何分析我的构造函数