【问题标题】:How will it happen when construct an object with the same object name [duplicate]构造具有相同对象名称的对象时会发生什么情况[重复]
【发布时间】:2017-08-23 07:25:04
【问题描述】:

如果代码进入一个作用域,定义了一个与外面的对象同名的新对象,新定义的对象会被正确定义吗?
如下代码所示:

class ClassB
{
    ClassA* p;
    ClassB(ClassA* a)
    {
         p = NULL;
         if (a != NULL)
               p = a;
    }
};

ClassA x;
if (some condition)
{
    ClassB x(x);
    // Will x->p be NULL or it will be pointer a?
}

在 if 范围内,x-> 在这里是 NULL 还是 a?
我可以在 gcc 中看到,它将为 NULL。但在 VS2015 中似乎是一个。
所以我的问题是,标准对这部分有什么规定。非常感谢。

【问题讨论】:

    标签: c++ compiler-optimization


    【解决方案1】:

    只是不要这样做。你必须在这里提问并且答案不是 100% 明显的事实意味着任何其他阅读代码的人也会被它弄糊涂。作为一个纯粹的学术问题,知道它是否可行很有趣,但在任何实际代码中只需这样做:

    ClassA x;
    if (some condition)
    {
        ClassB y(&x);
    }
    

    【讨论】:

    • 我认为问题在于第二个 x 是否像 int x{x};它的值是第一个 x 的值还是它的值是初始化之前的值
    • @AndrewKashpur 试图修复答案。现在它是一个评论,但我会留下它,除非它得到太多的反对票......
    猜你喜欢
    • 2013-06-26
    • 1970-01-01
    • 2011-03-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多