2010-11-25 37 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 
}