2016-11-10 38 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(位置的縮寫)

相關問題