我一直在查看字符串的find()函数的代码,它们将结果存储在数据类型为size_t的变量中。然而,据我所知,size_t是一个无符号整数,如果find()没有找到预期的字符串,它会返回-1。例如,如果我有strings="asdf";size_ti=s.find("g")cout它给我4294967295。但是,如果我用int数据类型替换size_t,它会给我-1。奇怪的是,当我像这样进行比较时strings="asdf";size_ti=s.find("g")if(i==-1){do_something;}无论i是size_t还是int都有效。那我用哪个?int还是size_t?
我认为根据OOP的设计,虚拟化在父类(superclass)构造函数中不起作用。例如,考虑以下C#代码。usingSystem;namespaceProblem{publicclassBaseClass{publicBaseClass(){Console.WriteLine("Hello,World!");this.PrintRandom();}publicvirtualvoidPrintRandom(){Console.WriteLine("0");}}publicclassDescendent:BaseClass{privateRandomrandomValue;publicDes
我正在尝试声明一个char数组的大小,我需要使用声明为size_t的变量的值来声明该大小。无论如何我可以将size_t变量转换为int以便我可以这样做吗? 最佳答案 size_t是一个整数类型,不需要转换。在C++中,如果您想拥有一个动态大小数组,您需要使用new来使用动态分配。也就是说,您不能使用:std::size_tsz=42;charcarray[sz];您需要改用以下内容:std::size_tsz=42;char*carray=newchar[sz];//...andlater,whenyouaredonewiththe
考虑以下显示多级继承的示例代码:案例1:这里类derived1是通过虚拟继承从类base派生的,类derived2是从类派生的直接类derived1。classbase{};classderived1:virtualpublicbase{};classderived2:publicderived1{};Case2:与Case1相同,只是不涉及虚拟继承classbase{};classderived1:publicbase//novirtualinheritance{};classderived2:publicderived1{};假设我在这两种情况下都创建了derived2类的对象。C
我想结合智能指针使用访问者模式,但编译器似乎无法检测子类并匹配适当的函数。我写了一个SSCE来说明问题:测试.hpp:classVisitor;classArea{public:virtualvoidvisit(constVisitor&visitor)=0;};classArea1:publicArea{public:virtualvoidvisit(constVisitor&visitor);};classArea2:publicArea{public:virtualvoidvisit(constVisitor&visitor);};classVisitor{public:virt
从我对boost的窥视中和libstdc++,库通常使用std::size_t和std::ssize_t每当事先不知道无符号/有符号索引的上限/下限时。我的问题是:为什么不使用uintmax_t来自而不是std::size_t和intmax_t而不是std::ssize_t? 最佳答案 前者是C++标准的一部分,后者不是。更准确地说,cstdintheader是最近才引入的(在C++11中)。这是因为stdint.h本身是C99的一部分,比C++98更新。 关于c++-与std::siz
让我们举一个最简单的例子:公式1:std::vectorvec;//add10E11elementsfor(std::size_tn=0;n公式2:std::vectorvec;//add10E11elementsfor(std::vector::size_typen=0;n当然,unsignedint或任何不合适的数据类型在这里都不起作用,我们必须编译x64。我的问题是:在任何情况下,第一个公式是否会导致问题,或者我们是否可以安全地始终以这种更短的表示法来编写它?如果它们很容易覆盖(x86、任何其他容器、size_type的其他应用程序),我也会对类似的设置感兴趣。
如何在模板参数中检查模板模板类的类型?例子B和C是模板类。我想创建一个类D那可以是D或D.只有D有D::f().这是我的解决方法(demo)。它有效。#includeusingnamespacestd;classDummy{};templateclassB{};templateclassC{};templateclassBC>classD{//f()isinstantiatedonlyif"BC"=="B"public:template>statictypenamestd::enable_if>::value,void>::typef(){}//^#1};intmain(){D::f(
这个问题在这里已经有了答案:Whatconstitutesavalidstatefora"movedfrom"objectinC++11?(2个答案)关闭3年前。标准指定STL容器在beginmoved之后(在这种情况下我们谈论启用move构造/赋值的std::move),在有效,但未指定状态。我相信这意味着我们只能应用不需要先决条件的操作。我记得这里有人在Stackoverflow上声称这是真的,经过一番检查后我同意了。不幸的是,我不记得我检查过哪些来源。此外,我无法在标准中找到相关信息。来自[container.requirements.general/4],table62([ta
std::size和std::map的最大大小是多少?有没有办法增加这个数字?谢谢! 最佳答案 您可以通过调用Container::max_size()获得每个标准库容器的最大大小在上面。如果在编译时需要理论最大大小值,请使用std::numeric_limits::max(). 关于c++-std::size和std::map的最大大小?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi