从指针转换为NonScalar对象类型?

时间:2016-10-04 11:31:32

标签: c++ pointers overloading default-arguments

有人可以解释为什么以下工作,尝试以下代码,它工作正常。

class A { 
public :
    int32_t temp ;
    A ( bool y = false  ) { }
} ;

int main ( int argc, char *argv[] )
{

  A temp ; 
  temp = new A () ;
  temp.temp = 5 ;

  std::cout << " " << temp.temp << std::endl ;
  return EXIT_SUCCESS;
}               // ----------  end of function main  ----------

1 个答案:

答案 0 :(得分:7)

在你的情况下。编译器使用implicitly defined Copy/Move Assignment operator。首先使用带有A的构造函数构造带有指针的bool

C ++中的所有指针类型都是implicitly convertiblebool。有两种方法可以防止这种废话:

  • explicit施工人员
  • deleted施工人员

因此,您可以这样做:

class A {

  public :
    int32_t temp ;
    explicit A( bool y = false  ) {
    }

    //Additionally
    A(void*) = delete;
};

定义一个只删除void*的构造函数,当传递指针时,overload resolution将构造函数的排名高于bool构造函数。因为每当你传递一个指针时它会被重载决策选中,并且因为它被删除了,所以程序将会格式不正确。