禁用类指针递增/递减运算符

发布于 2024-10-04 01:44:20 字数 155 浏览 6 评论 0原文

例如代码:

A* pA = new A;

我需要在编译阶段避免指针递增/递减运算符:

pA++; // MUST failed during compilation phase

For example code:

A* pA = new A;

I need to avoid pointer increment/decrement operators during compilation phase:

pA++; // MUST failed during compilation phase

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

流星番茄 2024-10-11 01:44:20

您可以将 pA 声明为

A * const pA = new A;

这使得 pA 成为指向 A 对象的 const 指针。初始化后指针无法更改,但其内容可以。

比较

const A *pA = new A;

它是一个指向 const A 对象的指针。

如果要迭代 A 对象的数组,请获取单独的指针。

A * const pAs = new A[size];

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

You could declare pA as

A * const pA = new A;

This makes pA a const pointer to an A object. The pointer cannot be changed after initialisation, but the contents of it can.

compare

const A *pA = new A;

which is a pointer to a const A object.

If you want to iterate over an array of A objects get a separate pointer.

A * const pAs = new A[size];

for (A * iter = pAs; iter < pAs+size; ++iter)
{
    // do stuff
}
铁憨憨 2024-10-11 01:44:20

这是不可能的。

因为我猜你想这样做是为了避免意外错误,所以我猜智能(ass)解决方案不适用(包括发明一些类似指针的包装类等),因为它们会增加错误的可能性:)

That's impossible to do.

Since I guess you want to do that to avoid unintended errors, I guess smart(ass) solutions do not apply (including inventing some pointer-like wrapper classes etc) because they will increase the probability of errors :)

冰之心 2024-10-11 01:44:20

如果你想坚持使用原始指针,这是不可能的。

您需要用一个不实现该运算符(也称为智能指针)的类来包装它。

If you want to stick with raw pointers, it's impossible.

You need to wrap it with a class that doesn't implement that operators (aka smart pointers).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文