g***l 发帖数: 2753 | 1 下面这段代码中,为什么不能用static_cast把一个(float*)的指针强制转换成
(int*),而用 reinterpret_cast? 请问这是规定吗? 假设 sizeof(float) ==
sizeof(int).
[localhost]$ g++ -g sample.cpp -o sample
sample.cpp: In function ‘int main()’:
sample.cpp:13: error: invalid static_cast from type ‘float*’ to type ‘int
*’
在C中,可以这么转,gcc也会发warning,但是不会编译失败。
谢谢了。
1
2 #include
3 using namespace std;
4 int main()
5 {
6 int inumber=1000;
7 float fnumber=1234.56;
8
9 int* piaddr = &inumber;
10 float* pfaddr=&fnumber;
11 cout << "piaddr =" << piaddr<
12 cout << "pfaddr = "<
13 piaddr=static_cast(pfaddr);
14 }
15
~ |
X****r 发帖数: 3557 | 2 是规定。不同的cast用作不同目的互不重合。
static_cast关键字是C++特有的,C里并没有。C里的强制类型转换既包含了C++里的
static_cast的用途,也包含了C++里的reinterpret_cast的用途,以及其它。
int
【在 g***l 的大作中提到】 : 下面这段代码中,为什么不能用static_cast把一个(float*)的指针强制转换成 : (int*),而用 reinterpret_cast? 请问这是规定吗? 假设 sizeof(float) == : sizeof(int). : [localhost]$ g++ -g sample.cpp -o sample : sample.cpp: In function ‘int main()’: : sample.cpp:13: error: invalid static_cast from type ‘float*’ to type ‘int : *’ : 在C中,可以这么转,gcc也会发warning,但是不会编译失败。 : 谢谢了。 : 1
|
g***l 发帖数: 2753 | 3 I see. thanks.
【在 X****r 的大作中提到】 : 是规定。不同的cast用作不同目的互不重合。 : static_cast关键字是C++特有的,C里并没有。C里的强制类型转换既包含了C++里的 : static_cast的用途,也包含了C++里的reinterpret_cast的用途,以及其它。 : : int
|
h*******s 发帖数: 8454 | 4 偶这几天也在学习这个,感觉挺复杂的
可以参考一下
http://stackoverflow.com/questions/2253168/dynamic-cast-in-c
int
【在 g***l 的大作中提到】 : 下面这段代码中,为什么不能用static_cast把一个(float*)的指针强制转换成 : (int*),而用 reinterpret_cast? 请问这是规定吗? 假设 sizeof(float) == : sizeof(int). : [localhost]$ g++ -g sample.cpp -o sample : sample.cpp: In function ‘int main()’: : sample.cpp:13: error: invalid static_cast from type ‘float*’ to type ‘int : *’ : 在C中,可以这么转,gcc也会发warning,但是不会编译失败。 : 谢谢了。 : 1
|
i*********n 发帖数: 58 | 5 static and dynamic cast is for casting up/down polymorphic types, so
compiler need to check compatibility. reinterpret cast is like C style of
cast "()variable" and you can cast anything but very dangerous unless
you are 100% sure what you are doing. |