2016-11-10 37 views
-3
与堆栈工作

制作类(代码是不是我的)我应该知道的声明size_t的任何副作用是什么?

我有这样的代码:

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]; 

} 



}; 

什么的size_t PTR是什么意思? size_t需要ptr值?要么?

+0

'size_t ptr;'与int size基本相同' – NathanOliver

+1

所有这些都是噪声。他们都不需要。 –

+1

我投票结束这个问题作为题外话,因为这是由每个基本的C++初学者的书或教程。 –

回答

2

size_t是一种类型 - 在头文件cstddef中定义的类型,它可以保存对象的最大尺寸。在现代系统中,它通常与指针的大小相同,并且这通常是64位(8字节)。但是,这不是标准所要求的。

因此,该行声明变量ptr的类型为size_t,这很容易混淆 - ptr作为名称表明变量类型应该是指针。

在附注中,此代码表现出未定义的行为 - 弹出空栈或推入完整行为时。

2

size_t是实现定义的无符号整数类型。

例如,size_t可以定义根据该定义size_t是该类型unsigned long别名以下方式

typedef unsigned long size_t; 

从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(位置的缩写)

相关问题