草庐IT

CACHELINE_SIZE

全部标签

c++ - 我应该为 size_t 包含 stddef.h 还是 cstddef

当我想使用size_t时在C++中,我应该包含或?我听几个人说是个坏主意,应该弃用。这是为什么呢? 最佳答案 stddef.h是C头文件。姓名size_t在它的全局命名空间中。另一方面,它是一个C++头文件,它将C名称包装到std命名空间中,这自然是C++方法,所以如果包含并且编译器是兼容的,你必须使用std::size_t.显然,在C++中,C++方法更合适。从技术上讲,Cheader也可能包含std命名空间中的名称。但是Cheader(以.h结尾的)也将名称引入全局命名空间(从而污染了它)。

c++ - 将整数文字初始化为 std::size_t

有一些已知的方法可以操作整数文字的类型0L;//long3U;//unsignedinteger1LL;//longlong我需要一种将整数文字初始化为std::size_t的方法.我以为这样做了2U;//unsignedint就够了,但是在调用需要两个相同整数类型的参数的函数模板时,我仍然会遇到编译器错误(没有匹配的函数来调用func(unsignedint,size_t)我知道/验证了显式转换(static_cast(1))第一个参数可以解决问题,但我想问是否有更漂亮的解决方案编辑函数有签名templateconstT&func(constT&a,constT&b);EDIT2我不

c++ - size_t 和 sizeof 不一致

不包含头文件就无法定义native算子的结果不是很麻烦吗?据此page,size_t在头文件cstddef、cstdio、cstring、ctime和cstdlib中定义。因此,如果这些头文件都不包含,那么size_t应该是未定义的。但是,以下程序编译时没有任何警告(使用MSVC2015RC)。intmain(){autod_Size=sizeof(int);return0;}似乎size_t有点像是原生类型和typedef之间的SCSS。标准是怎么说的? 最佳答案 5.3.3Sizeof[expr.sizeof]1)Thesize

c++ - C++ 和/或 C 中的 size_t 与 int

为什么在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中未提及?

c++ - 从 (char*, size_t) 创建 C++ 内存流的更简单方法,无需复制数据?

我找不到任何现成的,所以我想出了: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,但它似乎无法处理给定长度的二进制数据。我是在发明自己的轮子吗?编辑它

c++ - initializer_list::size() 上的 static_assert

为什么是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(

c++ - size_t 是字长吗?

size_t是编译代码的机器的字长吗?使用g++解析,我的编译器将size_t视为longunsignedint。编译器是否在内部选择size_t的大小,或者size_t实际上是在stddef.h中的某个预处理器宏中将其键入定义为字长在编译器被调用之前?还是我偏离了轨道? 最佳答案 在C++标准中,[support.types](18.2)/6:“类型size_t是实现定义的无符号整数类型,它大到足以包含任何字节的大小对象。”这可能与“字长”相同,也可能不同,不管是什么意思。 关于c++

c++ - 为什么在声明为 size 的 vector 上使用 push_back 会导致 vector 为零?

我制作了一个恒定大小的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

c++ - 为什么 std::string::max_size 不是编译时常量?

std::string提供了一个max_size()方法来确定它可以包含的最大元素数。然而,一般来说,要计算出字符串的最大长度,程序员必须创建一个(可能为空的)字符串对象。如果这个类不需要程序员提供任何信息,为什么max_size()不能作为编译时常量使用?字符串计算其最大大小是否需要某种运行时信息? 最佳答案 一个原因是max_size函数根本不是很有用,委员会认为尝试修复它不值得。所以它就保持原样,因为它是文档化界面的一部分。参见库缺陷报告#197:http://www.open-std.org/jtc1/sc22/wg21/d

c++ - size_type 可以大于 std::size_t 吗?

带有std::allocator的标准容器有它们的size_typedefinedasstd::size_t.但是,是否可以有一个分配器来分配大小不能用size_t表示的对象?换句话说,size_type可以大于size_t吗? 最佳答案 是的,这在某些情况下可能很有用。假设您有一个程序希望访问比虚拟内存容量更大的存储空间。通过创建引用内存映射存储的分配器并在间接pointer对象时根据需要对其进行映射,您可以访问任意大量内存。这仍然符合18.2:6,因为size_t被定义为足够大以包含任何对象的大小,但17.6.3.5:2表28将