OPENCV static-cast是什么意思?
static_cast并非opencv中的运算符,而是c++语言的运算符,是一种显式强制转换。
此处写法等同于:
int intensity = int(binVal*hpt/maxVal);
亦或是干脆不用显式强制转换:
int intensity = binVal*hpt/maxVal;
staticcast和强制转换的区别
前面的是C的风格,后面的是C++的风格(也是推荐使用的)。
差别在于,static_cast更安全一些,对于指针操作的话,多了一些检查,例如无关指针就无法转换,父类指针向孩子指针,无法转换,常指针向非常指针无法转换,而前面的那个则是通吃,通常是下面四个转换的合体
reinterpret_cast
在低级编程以及硬件接口的开发过程中,常常需要将一个特定的物理内存地址赋值给一个指针。
为此必须使用
reinterpret_cast操作符计算地址值。
例子如下:
void *p;
// 将地址 0x5800FF 付给指针 p
p = reinterpret_cast< void* > (0x5800FF);
static_cast
通常这个运算符用来进行数值类型间的转化,比如int到float,也可以是自定义的某些数据类型的转化。
这个操作符通常也可以用于类指针之间的转化,但是这个运算符在父类到子类的转化中没有做检查并不安全。
dynamic_cast
这个操作符专门用于指针或者引用操作,也可以进行point -> void 的操作。
对父类和子类之间的指针装换这个操作具有类型检查的功能,比较安全!这里要注意的是,如果父类和子类之间没有虚函数(文档称为多态类),那么dynamic_cast不能执行转换,应采用static_cast来进行转换。
谁能详细介绍一下dynamic_cast static_cast reinterpret_cast 的用法和他们之间的区别
dynamic_cast是试探映射,如dynamic_cast<A>*pB意思是“我希望它是A*,并打算要求它是”。
它通常被称为类层次的动态导航。
而static_cast通常可用于类层次的静态导航,无映射变换,窄化变换(会丢失信息)等等,static_cast的应用要广一些,但如前所提到的,在类层次导航变换中我们应该使用前者,因为后者static_cast可能意味着冒险(比如变换时类似于强制转换一样丢失信息)。
但是在一个类层次中没有虚函数或者我们确定有其他允许我们安全向下映射的信息则后者static_cast更快一些。
static_cast与<int>与(d)分别代表什么意思?
类型转换。
将double类型的d 转换成int型,赋给int类型的x.
比int x=(int)d;更安全,且更好维护。
具体的static_cast与<int>与(d)分别代表什么意思你可以查看MSDN手册,你要学会使用MSDN。
这是必须得。
static_cast<unsigned int>(time(NULL) 的作用是什么?
偶写的程序还是我来回答吧
作用是把time函数返回的值转换成unsigned int型值
而这里的static_cast就是C++风格的类型转换
*static_cast//代表什么意思?
static_cast操作符:该操作符用于非多态类型的转换,任何标准转换都可以使用他,即static_cast可以把int转换为double,但不能把两个不相关的类对象进行转换,比如类A不能转换为一个不相关的类B类型。
static_cast本质上是传统c语言强制转换的替代品,也就是说static_cast<int> (a)和(int)a是一样的。
因此*static_cast<User*>(stack.Pop())与*(User*)statck.Pop()是相同的。
返回值可以转变为指针?
这要看函数的反回值是什么,你程序中的Pop函数可能反回值就是一个指针,所以才可以强制将指针指向的类型进行转换的。
比如函数Pop可以是这样的User *Pop(...){...}它的反回类型可能就是User或者与User类相兼容的指针。