将某些内容声明为我应该注意的size_t有什么副作用
What are any side-effects of declaring something as size_t that I should be aware of?
为堆栈工作制作类(代码不是我的(
我有这样的代码:
class stack {
private:
int size;
int* data;
// what next line mean?
size_t ptr;
public:
stack(int valid_stack_size) {
this->size = valid_stack_size;
this->ptr = 0;
this->data = new int[valid_stack_size];
}
void push(int value) {
if (this->ptr >= (size_t)this->size)
cout << "Stack is full" << endl;
this->data[this->ptr++] = value;
}
int pop() {
if (this->ptr == 0)
cout << "Stack is empty" << endl;
return this->data[--this->ptr];
}
};
PTR size_t是什么意思? size_t取 PTR 值?还是?
size_t
是一种类型 - 在头文件cstddef
中定义为可以容纳对象最大大小的类型。在现代系统上,它通常与指针的大小相等,这通常是 64 位(8 字节(。但是,标准没有要求这样做。
结果,这一行声明了类型 size_t
的变量ptr
,这令人困惑 - ptr
作为名称表明变量类型应该是一个指针。
附带说明一下,此代码表现出未定义的行为 - 在空堆栈上弹出或推送到完整堆栈时。
size_t
是实现定义的无符号整数类型。
例如,可以通过以下方式定义size_t
typedef unsigned long size_t;
也就是说,根据此定义size_t
是unsigned long
类型的别名。
来自C标准(7.19通用定义<stddef.h>
(
size_t 这是 sizeof 运算符结果的无符号整数类型;
或者在C++标准中写着(18.2种类型(
6 size_t类型是实现定义的无符号整数类型 它足够大,可以包含任何对象的大小(以字节为单位(。
C++size_t
的定义(在标头<cstddef>
中声明(也放在命名空间std
中。所以你也可以写
std::size_t ptr;
因此这行代码
size_t ptr;
表示标识符ptr
的声明,该声明将堆栈中的当前位置确定为具有类型size_t
,而该类型又通常定义为unsigned long int
。
至于你显示的代码,那么名称ptr
对于标量整数对象来说不是很好。例如,最好将其命名为pos
("位置"一词的缩写(
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 大于65535的C++数组[size]引发不一致的溢出
- 为什么(-1)%vector::size()总是返回0
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- vector.size() 在比较中意外工作
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 返回 str vs. str.substr(0,str.size()) 在 leetcode 中给了我不同的输出
- 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?
- 为什么"(!v.empty())"比"(v.size() >0)"好?
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- std::string.size() 未知行为
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- 复制构造函数的奇怪副作用
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- 从 std::string 到 std::array<char,size> 的 memcopy 额外数据是否是一种未定义的行为?
- 使用 std::size 来自非 const 上下文
- "fast"或"normal"在"free(): invalid next size (fast)"中是什么意思?