编程语言
首页 > 编程语言> > 【面经总结】C++小点随时记录

【面经总结】C++小点随时记录

作者:互联网

1、隐式类型转换和显式类型转换

隐式类型转换由编译器自动进行,不需要程序员干预。隐式类型转换通常有两种情况:赋值转换和运算转换。

1)赋值转换:将一种类型的数据赋值给另外一种类型的变量时,发生隐式类型转换。比如:

int x = 1.23; // 1.23是double类型,先隐式转换为int
float y = 66; // 66是int类型,先隐式转换为float

在对变量赋值时,若等号两边的数据类型不同,需要把右边表达式的类型转换为左边变量的类型,这可能会导致数据失真(精度降低),所以隐式类型转换不一定是安全的。

 
2)运算转换:C语言中不同类型的数据需要转换成同一类型,才可以进行计算。

字符型、整型、浮点型之间的变量通过隐式类型转换,可以进行混合运算(不是所有数据类型之间都可以隐式转换),转换规则如下:

#include <iostream>
using namespace std;
int main()
{
    int x = -1;
    unsigned int y = x;
    cout << "x: " << x << ", y: " << y << endl;
    return 0;
}

运行结果为:

x: -1, y: 4294967295

 
显示类型转换:C语言显示类型转换也称为强制类型转换。

#include <iostream>
using namespace std;

int main()
{
    double x = (int)1.5 * 2.5;
    cout << "x: " << x << endl;
    double y = (int)(1.5 * 2.5);
    cout << "y: " << y << endl;
    return 0;
}

运行结果为:

x: 2.5 y: 3

 

2、explicit关键字

C++中的explicit关键字的作用就是防止类构造函数的隐式自动转换。具备以下任一条件,该 关键字生效

C++中没有implicit关键字。

解决隐式类型转换的例子:

class Test1
{
public:
    Test1(int n)
    {
        num=n;
    }//普通构造函数
private:
    int num;
};
class Test2
{
public:
    explicit Test2(int n)
    {
        num=n;
    }//explicit(显式)构造函数
private:
    int num;
};
int main()
{
    Test1 t1=12;//隐式调用其构造函数,成功
    Test2 t2=12;//编译错误,不能隐式调用其构造函数
    Test2 t2(12);//显式调用成功
    return 0;
}

 

标签:类型转换,转换,int,面经,C++,小点,类型,隐式,构造函数
来源: https://blog.csdn.net/weixin_43967449/article/details/120273686