构造具有相同对象名称的对象时将如何发生
How will it happen when construct an object with the same object name
如果代码进入一个作用域并定义了一个与外部对象同名的新对象,新定义的对象是否会被正确定义?
如以下代码所示:
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 中看到,它将是空的。但是在VS2015中似乎是一个.
所以我的问题是标准对这部分有什么说法
只是不要这样做。事实上,你必须在这里问,而且答案不是100%显而易见的,这意味着其他任何阅读代码的人也会对此感到困惑。作为一个纯粹的学术问题,知道它是否有效是很有趣的,但在任何真正的代码中,只需这样做:
ClassA x;
if (some condition)
{
ClassB y(&x);
}
相关文章:
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 当您通过分配初始化C 对象时会发生什么
- 如果将变量设置为等于新对象,旧对象会发生什么情况?
- 在提前操作过程中,对象会发生什么
- 在C++中,当没有为类声明构造函数时,如果我用参数构造一个对象会发生什么
- 使用另一个(现有)对象创建新对象时会发生什么情况?
- 如果在C++中,具有自动存储的对象没有通过调用exit来销毁,那么在离开程序后,这些对象会发生什么
- 进程分叉后RAII对象会发生什么
- 将派生类对象分配给基类对象时会发生什么(我的意思是对象断言,而不是指针)
- 创建DLL导出对象时发生堆栈溢出错误
- 对象被销毁后,标量类型的子对象会发生什么
- 如果我们声明一个对象并将其分配给同一类的另一个对象会发生什么
- 在堆栈上分配对象时发生C++继承错误
- 为什么 C++ 自动对象优化发生在此代码中
- 重新初始化字符串对象时发生崩溃
- 当C++匿名对象替换以前分配的对象时会发生什么情况
- 当通过const引用传递对象时,对象所发生的事情会被添加到类似std::map的容器中
- 创建对象时发生SSE访问冲突崩溃
- 我想知道当函数在其中创建对象时会发生什么
- 将引用分配给新创建的堆栈分配对象时会发生什么