2010-11-25 36 views
1

例如代碼:禁止類指針遞增/遞減運算

A* pA = new A; 

我需要在編譯階段,以避免指針遞增/遞減運算:

pA++; // MUST failed during compilation phase 
+0

這會吸引'strlen()`的實現,這很可能是內聯函數,並且包含在大多數要編譯的文件中。 – MSalters 2010-11-25 16:13:02

+2

@MSalters OP只詢問指向A的指針,反正也沒有提供strlen(A *)。 – Simone 2010-11-25 16:15:09

回答

1

這是不可能做到的。因爲我猜你想這樣做以避免意想不到的錯誤,我猜智能(屁股)解決方案不適用(包括髮明一些類似指針的包裝類等),因爲它們會增加錯誤的概率:)

1

如果你想堅持原始指針,這是不可能的。

你需要用一個沒有實現該操作符的類(又名智能指針)來包裝它。

2

你可以聲明pA的作爲

A * const pA = new A; 

這使得帕常量指針,指向一個目的。初始化後指針不能改變,但其內容可以。

比較

const A *pA = new A; 

這是一個指向一個const目的。

如果你想迭代一個A對象的數組,獲得一個單獨的指針。

A * const pAs = new A[size]; 

for (A * iter = pAs; iter < pAs+size; ++iter) 
{ 
    // do stuff 
}