我正在编写一组充当接口的纯虚拟类。这个想法是,实现此类接口的代码可以使用不同的构建配置、编译器,甚至不同的 STL 实现来构建,以通过此类接口使用此类对象。
像和一样的普通旧数据uint32_t是标准化的。(不是因为标准没有说明它的大小。)doublefloatbool
属于哪个类别std::size_t?它纯粹是机器架构的功能吗?例如,在 32 位机器上,它可能sizeof(std::size_t)不是 4?
当我在一个std::vector<Foo>(或每个具有随机访问迭代器的容器)上循环时,我使用了一个无符号整数变量i。如果我想尊重规范,我应该使用std::size_t还是容器本身给出的类型:std::vector<Foo>::size_type?
如果我选择std::size_t(出于可读性原因),我可以确定std命名空间中每个容器的每个实现都使用std::size_tassize_type吗?
注意:我只使用 C++98(出于兼容性原因)。
#include <stdio.h>
int main(){
ssize_t a= -1;
size_t b = (unsigned)a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
a是 8 个字节都设置为1,但是b在unsigned没有做适当的情况下转换为 4 个字节的数字(unsigned size_t),这是为什么?为什么它不会变成一个 8 字节的无符号变量?
std::array 模板参数是template < class T, size_t N > class array;其中 N 代表数组中元素的数量。
我的疑问是为什么是类型std::size_t?std::size_t 不是以字节为单位的对象/指针大小的别名。std::size_t
为什么用它来表示std::array这里的元素数量?
我想知道 - 当我们用某个值初始化 unsigned size_t 时,C++ 是否会进行隐式转换?像这样:
size_t value = 100;
Run Code Online (Sandbox Code Playgroud)
将“u”文字添加到值中以防止这种转换是否有意义,就像这样?
size_t value = 100u;
Run Code Online (Sandbox Code Playgroud) 这是一个功能阅读线的简短片段.这bufsize与它相比((size_t)-1)/2有何可能?
我想象将变量与例如比较.int - 这是不可能的; 相反,INT_MAX是正确的,我想.那么该代码如何实际工作并且不会出错?
int c;
size_t bufsize = 0;
size_t size = 0;
while((c=fgetc(infile)) != EOF) {
if (size >= bufsize) {
if (bufsize == 0)
bufsize = 2;
else if (bufsize <= ((size_t)-1)/2)
bufsize = 2*size;
else {
free(line);
exit(3);
}
newbuf = realloc(line,bufsize);
if (!newbuf) {
free(line);
abort();
}
line = newbuf;
}
/* some other operations */
}
Run Code Online (Sandbox Code Playgroud) 在eclipse中它不识别类型size_t,它在它上面写错误和消息uknown类型名称'size_t',它写得正确
简单的问题,在处理数组或其他大型数据结构时,我通常会在我通常使用整数的地方强迫自己开始使用size_t(或unsigned longs?)会对我有好处吗?
假设你有一个向量指针:
auto myVectorPtr = myVector;
Run Code Online (Sandbox Code Playgroud)
您不知道,此向量的大小大于:
std::numeric_limits<int>::max();
Run Code Online (Sandbox Code Playgroud)
你有一个循环:
for(int i = 0; i < myVectorPtr->size(); ++i)
Run Code Online (Sandbox Code Playgroud)
使用不是更好
for(size_t i = 0; i < myVectorPtr->size(); ++i)
Run Code Online (Sandbox Code Playgroud)
避免遇到溢出?
我想我的问题确实是,在算术和其他常见操作中使用size_t(或unsigned longs?)是否有任何副作用.如果我开始使用size_t(或unsigned longs?)而不是经典int,我还需要注意什么.
size_t和int之间的区别是有据可查的,我概括了一下:前者是某些无符号整数类型的别名,它是依赖于实现的,而后者是有符号的; 前者适用于内存声明,而后者适用于算术运算.
我的问题是,如果我做一些算术计算来给int(它永远不会太大而且总是正的)并将它分配给size_t变量(用于访问数组位置),是否存在任何可能出现问题的情况出现?
我已经阅读了有关此主题的几篇文章,但是有人说应该完成的方式取决于您所使用的体系结构和系统(Windows / Linux),那么是否有适当的方法可以独立于该平台?