为什么在C++容器中,它返回的是size_type而不是int?如果我们正在创建自己的结构,是否也应该鼓励我们使用size_type? 最佳答案 一般来说,size_t每当您测量某物的大小时都应使用。真的很奇怪size_t只需要表示0到SIZE_MAX之间字节和SIZE_MAX只需为65,535...来自C++和C标准的其他有趣的限制是:sizeof()的返回类型是size_t它是一个无符号整数operatornew()将要分配的字节数作为size_t参数size_t在中定义SIZE_MAX在中定义在C99中但在C++98中未提及?
我找不到任何现成的,所以我想出了:classmembuf:publicbasic_streambuf{public:membuf(char*p,size_tn){setg(p,p,p+n);setp(p,p+n);}}用法:char*mybuffer;size_tlength;//...allocate"mybuffer",putdataintoit,set"length"membufmb(mybuffer,length);istreamreader(&mb);//use"reader"我知道stringstream,但它似乎无法处理给定长度的二进制数据。我是在发明自己的轮子吗?编辑它
为什么是std::initializer_list::size不允许在static_assert中使用,即使它被声明为constexpr在我的libstdc++(v.4.6)中?例如下面的代码:templateclassPoint{public:Point(std::initializer_listinit){static_assert(init.size()==Length,"Wrongnumberofdimensions");}};intmain(){Pointq({1,2,3});return0;}给出以下错误:test.C:Inconstructor‘Point::Point(
size_t是编译代码的机器的字长吗?使用g++解析,我的编译器将size_t视为longunsignedint。编译器是否在内部选择size_t的大小,或者size_t实际上是在stddef.h中的某个预处理器宏中将其键入定义为字长在编译器被调用之前?还是我偏离了轨道? 最佳答案 在C++标准中,[support.types](18.2)/6:“类型size_t是实现定义的无符号整数类型,它大到足以包含任何字节的大小对象。”这可能与“字长”相同,也可能不同,不管是什么意思。 关于c++
我制作了一个恒定大小的vector来存储负值,然后打印我得到的所有值都是零。我只想知道为什么它不存储负值。#include#includeintmain(){std::vectorv(5);v.push_back(-1);v.push_back(-2);v.push_back(-3);v.push_back(-4);v.push_back(-5);for(inti=0;i 最佳答案 这是因为push_back将new元素放在了vector的末尾。运行i到9可以看到效果:负数会占用v[5]到v[9].写作std::vectorv{-1
std::string提供了一个max_size()方法来确定它可以包含的最大元素数。然而,一般来说,要计算出字符串的最大长度,程序员必须创建一个(可能为空的)字符串对象。如果这个类不需要程序员提供任何信息,为什么max_size()不能作为编译时常量使用?字符串计算其最大大小是否需要某种运行时信息? 最佳答案 一个原因是max_size函数根本不是很有用,委员会认为尝试修复它不值得。所以它就保持原样,因为它是文档化界面的一部分。参见库缺陷报告#197:http://www.open-std.org/jtc1/sc22/wg21/d
带有std::allocator的标准容器有它们的size_typedefinedasstd::size_t.但是,是否可以有一个分配器来分配大小不能用size_t表示的对象?换句话说,size_type可以大于size_t吗? 最佳答案 是的,这在某些情况下可能很有用。假设您有一个程序希望访问比虚拟内存容量更大的存储空间。通过创建引用内存映射存储的分配器并在间接pointer对象时根据需要对其进行映射,您可以访问任意大量内存。这仍然符合18.2:6,因为size_t被定义为足够大以包含任何对象的大小,但17.6.3.5:2表28将
为什么返回类型是std::countdifference_type迭代器(通常是ptrdiff_t)。由于计数永远不会是负数,所以size_t技术上正确的选择?如果计数超出ptrdiff_t的范围怎么办?因为数组的理论可能大小可以是size_t?编辑:到目前为止,对于函数返回ptrdiff_t的原因,还没有合适的答案。.从下面的答案中收集到的一些解释是返回类型是iterator_traits::difference_type这是通用的,可以是任何东西。直到那时,它才有意义。在某些情况下,计数可能会超过size_t.但是,返回类型为什么是typedefptrdiff_titerator_
我想打印出size_t的值变量使用printf在C++中使用MicrosoftVisualStudio2010(我想在这段特定的代码中使用printf而不是,所以请没有答案告诉我应该使用代替)。根据帖子Platformindependentsize_tFormatspecifiersinc?正确的平台无关方式是使用%zu,但这似乎在VisualStudio中不起作用。VisualStudio文档位于http://msdn.microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx告诉我必须使用%Iu(使用大写i,而不是小写l)。微软没有遵循这里的
这个问题在这里已经有了答案:Howdoesthistemplatemagicdeterminearrayparametersize?(3个回答)关闭2年前。有人能解释一下这段代码是如何工作的吗?我知道这段代码的目的是获取数组的长度,但是不知道这段代码是怎么工作的:templateintGetArrLength(T(&)[size]){returnsize;} 最佳答案 首先让我们剖析参数T(&)[size]。首先从内到外、从右到左、括号组读取声明:它是一个未命名的参数,它是对T类型的大小为size的数组的引用。也就是说,它接受对任何