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++中有一个从双到 INT/C>的隐式转换。@杰姆斯:在这种情况下,选择的例子很糟糕,抱歉。严格地说,学究式的,它们不一样。但是人们总是这样做。这是一个由coppro回答的问题。请看@John btw。我同意C++对“cast”的使用有点令人讨厌(它使术语imho超载),但我认为说“cast”意味着“显式类型转换”(即“casting away const”、“cast notation”)已经足够狭窄了etc.都是关于显式类型转换的)。正如5.2.10/10所说,有些人所说的演员类型实际上被称为“类型双关语”。很好,C比C++更清楚。它对“cast”有一个清晰而简洁的定义。请注意,
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*
。当然,这两种类型的双关语都是未定义的行为。