Qt中的强制类型转换问题

编程语言里面的强制转换问题还是挺常见的,丢失精度的强制转换有时候也是需要用到的,但是有的时候未必如我们所想的那样

qint8 Change_::Modify()
{

    qreal a__;
    qreal b__;
    a__ = Add_two::Justadd(0,0,0);
    b__ = Add_two::Justadd(0,0,1);

    qint8 a___ = (int)a__;
    qint8 b___ = (int)b__;
    /*

    qint8 a___ = (qint8)a__;
    qint8 b___ = (qint8)b__;
     */

    return (a___+b___);
}
cout <<(int8_t)3.33 +(int8_t)6.66<<endl;

实际上这两段代码要求实现相同的功能,但是定义在类中的转换函数却不能够实现,额,也不是完全绝对的说法

int Change_::Modify()
{

    qreal a__;
    qreal b__;
    a__ = Add_two::Justadd(0,0,0);
    b__ = Add_two::Justadd(0,0,1);

    int a___ = (int)a__;
    int b___ = (int)b__;

    return (a___+b___);
}

这段代码和上面的代码具有完全相同的结构模式,所不同的只是变量的类型定义,但是此段代码却能够实现要求的强制转换功能!

qint8
int

比较好奇,Qt里面的编译器是怎样的执行机制,于是我尝试了一波VS里面C++的的编译模式,结果?

vs2010

打印不出来,肯定是和程序有Bug关联了,看来不是单纯的Qt的锅,以后这块还是要注意一下,强制转换貌似也不能乱用,今天还发现了一个问题

#ifndef USE_H
#define USE_H

using namespace std;

#endif // USE_H

尽管可以将头文件包含在内部,但是却不能将名称空间放在里面,会报错,额,要注意,学艺不精啊

发表评论

电子邮件地址不会被公开。 必填项已用*标注