C++ *cast*和*conversion*的含义是什么?
可能重复:C++ *cast*和*conversion*的含义是什么?,c++,casting,terminology,C++,Casting,Terminology,可能重复: 我个人可以互换地使用术语cast和conversion。对吗?如果没有,区别是什么?转换需要从不同类型B的实例构造类型A 铸造需要使用一个或多个C++铸造操作符,或者C风格的铸件。 < P>转换意味着接受特定类型的值并执行某些功能以在另一种类型中提供表示。Casting只是简单地说“假设此数据为这种新类型”。有些类型转换隐式地导致转换,所以我认为它有点可互换性。我不认为它们是一样的——类型转换导致编译器执行显式转换,但也可以进行隐式转换,例如 double d = 23; // i
我个人可以互换地使用术语cast和conversion。对吗?如果没有,区别是什么?转换需要从不同类型B的实例构造类型A
铸造需要使用一个或多个C++铸造操作符,或者C风格的铸件。
< P>转换意味着接受特定类型的值并执行某些功能以在另一种类型中提供表示。Casting只是简单地说“假设此数据为这种新类型”。有些类型转换隐式地导致转换,所以我认为它有点可互换性。我不认为它们是一样的——类型转换导致编译器执行显式转换,但也可以进行隐式转换,例如double d = 23; // implicit conversion from int to double
与:
int i = static_cast<int>(23.0); // explicit conversion from double to int
int i=static_cast(23.0);//从double到int的显式转换
强制转换是一种特殊类型的转换。另一种类型是由像atoi和itoa这样的函数以及字符串流执行的。还有一种是这样的:
int minutes_to_seconds(int minutes) { return minutes * 60; }
不过,强制转换可能会导致转换发生——这不仅仅是假设数据为新类型的问题。在上面给出的示例中,23在被存储在I.@ SGOODETZ中之前被转换成int。因此,我最后一句关于一些编译器暗示(编译器)应该发生转换。在C和C++上下文中不正确。@ JBLY:如果您对此不客气,那么我想可能没问题:)但是cast是一种语言构造,用于要求编译器执行它不会隐式执行的转换。因此,这些术语是相关的,但不能互换。(说他们是可互换的,就像说要披萨和买披萨一样。我的经历中不真实,即使这两个确实存在于一个模糊的梯度……)特殊的演员C++提供的东西也很复杂,“SyrimeSkyCase:@ SGOOLDDEZ建设性抱怨总是一件好事:”C++中有一个从
reinterpret\u cast(some\u char\u ptr)
不是类型双关语:它在读取指针的值时仍然将指针解释为char*
。一个类型双关语看起来像是reinterpret\u cast(some\u char\u ptr)
或*reinterpret\u cast(some\u char\u ptr)
。这会将指针的值读取为int*
。当然,这两种类型的双关语都是未定义的行为。