C++中static_cast和reinterpret_cast的区别?请说的清楚一点,不要copy的啊!

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 09:17:11
C++中static_cast和reinterpret_cast的区别?请说的清楚一点,不要copy的啊!

C++中static_cast和reinterpret_cast的区别?请说的清楚一点,不要copy的啊!
C++中static_cast和reinterpret_cast的区别?
请说的清楚一点,不要copy的啊!

C++中static_cast和reinterpret_cast的区别?请说的清楚一点,不要copy的啊!
static_cast(expression)

例如,假设你想把一个int转换成double,以便让包含int类型变量的表达式产生出浮点数值的结果.如果用C风格的类型转换,你能这样写:

int firstNumber, secondNumber;
...
double result = ((double)firstNumber)/secondNumber;

如果用上述新的类型转换方法,你应该这样写:

double result = static_cast(firstNumber)/secondNumber;

这样的类型转换不论是对人工还是对程序都很容易识别.

static_cast在功能上基本上与C风格的类型转换一样强大,含义也一样.它也有功能上限制.例如,你不能用static_cast象用C风格的类型转换一样把struct转换成int类型或者把double类型转换成指针类型.

关于reinterpret_cast,使用这个操作符的类型转换,其的转换结果几乎都是执行期定义(implementation-defined).因此,使用reinterpret_casts的代码很难移植.

reinterpret_casts的最普通的用途就是在函数指针类型之间进行转换.例如,假设你有一个函数指针数组:

typedef void (*FuncPtr)(); // FuncPtr is 一个指向函数
// 的指针,该函数没有参数
// 返回值类型为void
FuncPtr funcPtrArray[10]; // funcPtrArray 是一个能容纳
// 10个FuncPtrs指针的数组

让我们假设你希望(因为某些莫名其妙的原因)把一个指向下面函数的指针存入funcPtrArray数组:

int doSomething();

你不能不经过类型转换而直接去做,因为doSomething函数对于funcPtrArray数组来说有一个错误的类型.在FuncPtrArray数组里的函数返回值是void类型,而doSomething函数返回值是int类型.

funcPtrArray[0] = &doSomething; // 错误!类型不匹配
reinterpret_cast可以让你迫使编译器以你的方法去看待它们:
funcPtrArray[0] = // this compiles
reinterpret_cast(&doSomething);

转换函数指针的代码是不可移植的(C++不保证所有的函数指针都被用一样的方法表示),在一些情况下这样的转换会产生不正确的结果

C++中static_cast和reinterpret_cast的区别?请说的清楚一点,不要copy的啊! static_cast(arg); c++中value+=static_cast&amp;lt;int&amp;gt;(power(2, 那个static_cast是什么意思? dynamic_cast 与static_cast的区别 if('a'>'b' || 66 >static_cast('A')) cout static_cast<double>(2)是什么意思? long和float区别void intfrac(float n,float &INT,float &FRAC){long temp=static_cast(n);INT=static_cast(temp);FRAC=n-INT;}这个函数谁能给我解释解释他的目的是输入3.14得到3和0.14为什么通过long和float之间的转换就能达 求下面德语句中,为什么是sind,而不是ist?Ausschlaggebend für unsere Entscheidung sind rein stellenspezifische Gründe. Ball* ball = static_cast(p);这句代码什么意思? [ livz ] [ baik ] [west ] [ klaud] [ lait ] [ri:d ] [ ri:dz ] [kait] 看音标写单词回答正确 加悬赏(越快加越多)还没打完、 'c(这个音标打不出只好打反的)fis] [ 'bukstc(这个音标打不出只好打反的] rein ] [' 看音标写单词:[rein],[brein],[peint],[feil],[trein] fanyi(cannot mount data files.please rein stall this) rein,nom,money,pen,you,lay,tree加一个字母 这题为什么选D,不是选C,Then,you need to find a place that'scomfortable.Make sure it has good lighting,the temperature is nice and you'rein a good chair.Or you can find some place that you can relax in withoutfalling asleep,although there's no 英语翻译就是这几个:╱rein╱;╱trein╱;╱baik╱;╱w3:k╱;╱'traefik╱ ↓ ↓ 上下各两个△符号 a和e连在一起的英标 谢啦,明天就要交了啊 . 根据音标写单词(中文) rein da;ns nekst ku;l 'pleigraund 'iks'pensiv where that anger of yours will get you if you don't rein it in