【问题标题】:Are Both of these expressions same in C++? [closed]这两个表达式在 C++ 中是否相同? [关闭]
【发布时间】:2019-04-26 18:23:18
【问题描述】:

表达式 1 -

int a;
int* ap = &a;

表达式 2 -

int a;
int*ap = new a;

【问题讨论】:

  • 不,他们不是。是什么让你这么认为?
  • @πάνταῥεῖ 在这两种情况下,ap 都包含a 的地址,对吗?
  • 你检查过表达式2是否编译了吗?
  • 不,第二个例子甚至没有编译。
  • 正如我在第一条评论中所说,他们没有。您可以在reference documentation 中了解该关键字的作用。从猜测和反复试验中学习 c++ 不是正确的方法。

标签: c++ oop


【解决方案1】:

没有。

表达式 1 定义了 int 类型的变量 aint* 类型的变量 ap。它还将ap初始化为之前定义的变量a的内存地址。


表达式 2 无法编译,因为 new a 不是有效语法。

假设您的意思是 new int,那么表达式 2 定义了一个 int 类型的变量 a 和一个 ap 类型的 int* 变量。它还将ap初始化为指向动态分配的int


在表达式 1 中,您有 1 个int 和 1 个int*

在表达式2中有2个ints,1个作为自动存储(即a),1个作为动态存储,1个int*apap指向通过动态存储存储的int .

【讨论】:

  • 你的意思是第 2 段中的表达式 2?
  • 你是如何编译int*ap = new a;的?
  • @Asu 是的,哎呀
  • @πάνταῥεῖ 非常好的评论,我读完了,谢谢,已编辑
  • @πάνταῥεῖ 为了回答这个问题,我用我的自定义扩展编译了 clang,以允许省略 decltype(a)
【解决方案2】:

表达式 1 -

int a;
int* ap = &a;

Ans : 这是一个 int 指针,将留在堆栈中。

表达式 2 -

int a;
int*ap = new a; **// syntax error**

Ans:new 将在堆中分配内存,这需要手动清理(使用 delete),而在表达式 1 中,它会在超出范围时自动清理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-13
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    相关资源
    最近更新 更多