从指针到非标量对象类型的转换
Conversion From Pointer To NonScalar Object Type?
谁能解释一下为什么下面的工作,试了下面的代码,它工作得很好。
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 ----------
在你的情况下。编译器使用隐式定义的拷贝/移动赋值操作符。它首先使用带bool
的构造函数用指针构造A
。
所有指针类型在c++中隐式转换为bool
。有两种方法可以防止这种废话:
-
explicit
constructors -
deleted
constructors
因此,您可以这样做:
class A {
public :
int32_t temp ;
explicit A( bool y = false ) {
}
//Additionally
A(void*) = delete;
};
定义一个只接受void*
作为删除对象的构造函数,当传递指针时,该构造函数的重载解析等级将高于bool
构造函数。由于无论何时传递指针,重载解析都会选择它,并且由于它已被删除,因此程序将是病态的。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 模板中的类型转换
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 通过引用传递参数时C++类型转换
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- C++无效的函数类型转换
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何将Windows产品类型转换为名称?
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 事件系统:使用类型转换或联合进行继承
- 如何在参数中定义隐式类型转换的构造函数?
- 类模板实例化中的类型转换