例如代碼:禁止類指針遞增/遞減運算
A* pA = new A;
我需要在編譯階段,以避免指針遞增/遞減運算:
pA++; // MUST failed during compilation phase
例如代碼:禁止類指針遞增/遞減運算
A* pA = new A;
我需要在編譯階段,以避免指針遞增/遞減運算:
pA++; // MUST failed during compilation phase
這是不可能做到的。因爲我猜你想這樣做以避免意想不到的錯誤,我猜智能(屁股)解決方案不適用(包括髮明一些類似指針的包裝類等),因爲它們會增加錯誤的概率:)
如果你想堅持原始指針,這是不可能的。
你需要用一個沒有實現該操作符的類(又名智能指針)來包裝它。
你可以聲明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
}
這會吸引'strlen()`的實現,這很可能是內聯函數,並且包含在大多數要編譯的文件中。 – MSalters 2010-11-25 16:13:02
@MSalters OP只詢問指向A的指針,反正也沒有提供strlen(A *)。 – Simone 2010-11-25 16:15:09