作为初学者,我对size_t真的很困惑。我可以使用int、float或其他类型。为什么还要声明size_t类型。我感觉不到它的优点。我看过一些pages,但我仍然无法理解。 最佳答案 它的主要优点是它是完成这项工作的正确工具。size_t按字面定义为足够大以表示您平台上任何对象的大小。其他人不是。所以,当您想存储对象的大小时,为什么要使用其他东西?如果您愿意,可以使用int,但您会故意选择导致错误的劣势选项。我不太明白您为什么要这样做,但这是您的代码。不过,如果您选择使用float,请告诉我们您正在编写什么程序,以便我们避免使用它。
我在看std::string::max_size并注意到这个例子:#include#includeintmain(){std::stringstr("Teststring");std::cout输出:max_size:4294967291但是,我一直认为这个限制是由于无符号整数/size_t的最大值造成的-所以我有点希望它是2^32-1也就是4294967295。为什么此示例中的最大大小不使用这4个字节?我还尝试运行示例代码,在那台机器上它是2^62-这又让我感到困惑,为什么不是2^64-1代替?总的来说,我想知道,实现不会使用所有空间的原因是什么? 最佳答
以下代码中的4个类:A、B、C和D。他们都有一个成员operatornew[]。此外,B有一个构造函数;C有析构函数;D有一个成员operatordelete[]。输出成员operatornew[]的参数size和4个类的sizeof:new[]A40new[]B40new[]C48new[]D48sizeof(A)4sizeof(B)4sizeof(C)4sizeof(D)4大小不同的原因是什么?代码(我知道很丑):#includeusingnamespacestd;classA{inti;public:staticvoid*operatornew[](std::size_tsize
我像这样重载了operatornew[]void*human::operatornew[](unsignedlongintcount){cout现在打电话human*h=newhuman[14];说sizeof(human)=16,但计算它打印出来的是232,也就是14*16+sizeof(int*)=224+8。为什么要分配这个额外的空间?它落在内存中的什么地方?因为当我打印*h或h[0]我得到相同的结果,所以它不在内存块的开头。它是否完全正确,或者我在这里遗漏了一些东西? 最佳答案 分配的额外空间用于存储内部使用的数组大小(在实
将迭代器条件右操作数从size_t转换为int更好,还是迭代可能超过int的最大值?答案实现具体吗?inta;for(size_ti=0;i 最佳答案 我几乎总是使用第一个变体,因为我发现大约80%的时间,我发现some_func应该也需要一个size_t。如果事实上some_func采用带符号的int,您需要了解当vect大于INT_MAX时会发生什么.如果解决方案在您的情况下不明显(通常不是),您至少可以替换some_func((int)i)与some_func(numeric_cast(i))(有关numeric_cast的一
我对以下C++11代码有点困惑:#include#include#includeintmain(){std::stringhaystack("abcdefabcghiabc");std::regexneedle("abc");std::smatchmatches;std::regex_search(haystack,matches,needle);std::cout我希望它打印出3但我却得到了1。我错过了什么吗? 最佳答案 你得到1因为regex_search仅返回1个匹配项,size()将返回捕获组的数量+整个匹配值。你的匹配是.
在thisquestion我看到以下内容:for(vector::size_typeix=0;ix!=ivec.size();++ix){ivec[ix]=0;}我明白为什么int这里没有使用,但为什么不直接使用size_t?什么情况下应该用vector::size_type而不是size_t? 最佳答案 初级使用时间size_type在模板中。虽然std::vector::size_type通常是size_t,some_other_container::size_type可能是其他类型1。允许用户添加到std的少数内容之一命名空间
我正在使用OracleAPI访问数据库,此API有一个函数readBuffer(char*buffer,unsignedintsize);,我无法对其进行任何更改。我有一个使用此API的类,我的函数的签名目前采用std::string和unsignedint作为大小,问题是当我将std::string.size()传递给函数的size参数时,我从编译器收到一条警告,将size_t转换为unsignedint可能导致数据丢失。我想知道是否有一种有效的方法可以将size_t转换为unsignedint,这样我就可以将它传递给我的API而不是从编译器得到警告?我理解size_t的目的,并且在
在C++中,当输入参数复制成本低时(例如,int、float等),它通常被传递只需按值。相反,复制起来并不便宜的输入“观察到的”参数(例如std::string)由const&传递。我想知道像POD这样的类型表示具有int坐标的二维vector,例如structVec2i{intX;intY;};在32位MSVC编译器上,它只有8个字节(2*sizeof(int))。您会按值还是按const&传递它?那么Vec2d有double类型的坐标呢?(在MSVC上它将是2*sizeof(double),所以2*8=16字节。)是否有“大小阈值”(例如16字节?)用于放置一行并说:“对于超过X大
Doxygen(v1.8.11)创建漂亮的UML协作图。不错,除了被汇集到“size_t”的行弄得乱七八糟。形式上正确,但完全没用。有没有办法防止“size_t”出现在聚合类中? 最佳答案 在您的Doxygen配置文件中将size_t放在EXCLUDE_SYMBOLS下。http://www.doxygen.nl/config.html#cfg_exclude_symbols 关于c++-如何去掉doxygen协作图中的"size_t",我们在StackOverflow上找到一个类似的问