2010-02-28 47 views
3

我是C++的新手,对C++的转型有一点理解。我是否认为(int,double ...)作为类

据 “C++入门”,老样式转换是这样的:INT(可变)或(INT)可变,和被C引入新++标准包括的static_cast <>,的const_cast <>,的reinterpret_cast < >和dynamic_cast <>。

  1. static_cast <>是否等同于“旧式风格”?我认为这不是如果我考虑基本数据类型(int,double ...)作为一个类,那么它会很方便地使用int(对象)来执行转换吗?标准C++是否将基本类型实现为一个类?

回答

9

1.旧风格的转换是相当的不同类型转换:

int i; 
double d = 3.14; 
i = static_cast<double>(d); //(double)d; 
const char* p = reinterpret_cast<char*>(&d); //(char*) &d; 
char* q = const_cast<char*>(p); //(char*) p; 

2.基本数据类型是不是类(例如,你不能从他们那里继承),但他们支持的构造函数语法均匀性。

int i(10); //same as int i = 10 

要在基本类型之间进行转换,您确实可以使用此语法(虽然static_cast更突出)。

+1

只是一个澄清 - 旧风格演员在不同情况下做不同的工作。有时他们翻译值,有时他们只是用不同的类型重新标记相同的位模式,有时他们只是添加/删除类型修饰符,如“const”。特别是在模板中,这可能是一个问题,因为模板程序员需要指定正确的行为,但不一定知道涉及哪些类型。 C++类型转换更精确地指定了预期的内容,并且在模板中更不易出现问题。 – Steve314 2010-02-28 12:03:04