自学内容网 自学内容网

07.18_111期_C++_异常

 类型转换
 具有一定关联的值才能进行类型转换
 在C语言中,下面的情况可以进行类型转换
 case1: 隐式类型转换,不需要特殊给定一个符号说明发生类型转换
          整型 和 整型之间(有无符号)
          浮点数 和 整型之间 (short、long、double、float 和 int)
 case2: 强制类型转换,需要特殊给定一个符号说明发生类型转换
          整型和指针
          不同类型的指针之间

 注意:
        不是只要给定符号就能强制类型转换,比如 double  和  指针

 在C++中,在C语言的基础之上,还有下面的情况可以进行类型转换
 case1: 内置类型 转换成 自定义类型
          比如一个类中 实现了一个 单参数的构造函数,
          而且这个参数是内置类型,那么此内置类型 可以和 自定义类型转换
 case2: 自定义类型 转换成 内置类型
 case3: 自定义A类型 转换成 自定义B类型
          在 B 类中设计一个构造函数,这个构造函数的参数是 A 类的变量即可

class A
{
public:
// 如果用explicit 修饰构造函数,表明这个类如果想要调用这个构造函数
// 不能使用 形如 A te = 1; 的语句进行初始化
// 只能使用 A te(1); 进行初始化
// explicit A(int a1)
A(int a1)
:_a1(a1)
{}

A(int a1, int a2)
:_a1(a1)
,_a2(a2)
{}

operator int()
{
return _a1 + _a2;
}
private:
int _a1 = 1;
int _a2 = 1;
};

int main()
{
int i = 1;
A te(1);

int j = te;

// while (cin.operator>>(x).operator bool())
// cin 通过重载 >> 这个运算符返回一个对象,
// 这个对象可以通过 operator bool() 转换成一个 bool 类型的变量
while (cin >> i)
{
cout << i << endl;
}

string str;
while (cin >> str)
{
cout << str << endl;
}

return 0;
}
// 对于下面的程序,在进行 (end >= pos) 比较时
// end 会被转换成 size_t
void insert(size_t pos)
{
int end = 10;
while (end >= pos)
{
cout << end << endl;
--end;
}
}

int main()
{
// C++ 中类型转换可以通过 static_cast 和 reinterpret_cast
// 其中 static_cast 对应的是隐式类型转换
// reinterpret_cast 对应的是强制类型转换
int i = 1;
double x = static_cast<double>(i);
A aa1 = static_cast<A>(1);

int j = 9;
int* p = reinterpret_cast<int*>(j);

// 但是 double x = reinterpret_cast<double>(p); 这句话还是非法的

return 0;
}
int main()
{
// const 修饰的常量仍存放在栈区
// volatile 这个关键字去掉了 一些编译器的优化
// 有一些编译器会直接从寄存器中拿数据,
// volatile 修饰以后,保证总是通过一个变量 对应的 内存地址取到这个 变量对应的值
// volatile const int a = 1;
const int a = 1;

// 可以通过 int* ptr = (int*)&a; 这种代码
// 强行将 a 的管理变成通过可以更改的变量 ptr,其实是很危险的
//int* ptr = (int*)&a;
// const_cast 强调了转换之后的变量可能
// 从 不会改变值的 变量 变成了 会发生改变的 变量
int* ptr = const_cast<int*>(&a);
(*ptr)++;

cout << *ptr << endl;
cout << a << endl;

return 0;
}


原文地址:https://blog.csdn.net/weixin_46366676/article/details/140667673

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!