我试图比较一个int和void*的工作,甚至是它们之间的比较
int i=1,j=2;
float a=1.1;
if((void *)i > (void *)j )
cout<<"i>j"<<endl;
else
cout<<"i<j"<<endl;
Run Code Online (Sandbox Code Playgroud)
输出是
i<j
Run Code Online (Sandbox Code Playgroud)
但是这个
if((void *)a > (void *)i )
cout<<"a>i"<<endl;
else
cout<<"a<i"<<endl;
Run Code Online (Sandbox Code Playgroud)
给出错误
error: invalid cast from type ‘float’ to type ‘void*’
Run Code Online (Sandbox Code Playgroud)
我以为我们可以抛出任何东西来搞乱指针?是不是这样?
void指针之间的比较,它是定义还是编译依赖?
这是明确定义的,但结果通常是未指定的,如C++ 11 5.9/3所述:"如果两个指针表示相同的地址或者都是空指针值,则如果运算符<=,则结果为true或> =否则为false;否则结果未指定."
请注意std::less
,即使内置运算符没有,也要求朋友定义指针的总顺序.
但是,使用从任意整数值转换的指针执行任何操作都会产生未定义的行为.
我以为我们可以抛出任何东西来搞乱指针?是不是这样?
No. reinterpret_cast
(或等效的C样式转换)可以在指针和整数类型之间进行转换.将浮点值转换为指针根本没有意义.