请C++高手回答:一个有关C++语言新关键字的问题!

600000 2002-10-10 05:18:54
请教下面一些C++语言中的新关键字:dynamic_cast、static_cast、typeid都是什么意思呀?
...全文
51 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
600000 2002-10-16
  • 打赏
  • 举报
回复
看来可能是真正理解的C++高手们不屑理会这样简单的问题吧,感谢上面几位朋友的指点,虽然没有完全明白,但已经有点眉目了。

由于今天晚上20:00 CSDN论坛将进行升级,所以就提前结贴吧!

这样做是为了尽最大限度的保护各位朋友的利益,因为升级后加分不再加“可用分”了,仅仅加“专家分”,所以今天我决定将我最后两个未结的问题全部结贴,希望各位朋友能够满意!

开始加分了!
jian 2002-10-13
  • 打赏
  • 举报
回复
一个例子:给一个包含10个string对象的数组分配空间
string *stringarray1 =
static_cast<string*>(malloc(10 * sizeof(string)));
600000 2002-10-13
  • 打赏
  • 举报
回复
好长呀,我先看看!
jian 2002-10-13
  • 打赏
  • 举报
回复
Effective C++的导读中有这些话:
新特性其實有四樣東西,分別是static_cast, const_cast, dynamic_cast, reinterpret_cast 四個轉型運算子。傳統的C 轉型動作如下:


(type) expression // 將expression 轉為type 型別
新的轉型動作則是這樣:


static_cast(expression) // 將expression 轉為type 型別
const_cast(expression)
dynamic_cast(expression)
reinterpret_cast(expression)

這些不同的轉型運算子有不同的作用:
const_cast 用來將物件或指標的常數性(constness)轉型掉,我將在條款21驗證這個主題。
dynamic_cast 用來執行「安全的向下轉型動作(safe downcasting)」,這是條款39 的主題。
reinterpret_cast 的轉型結果取決於編譯器— 例如在函式指標型別之間做轉型動作。你大概不常需要用到reinterpret_cast。本書完全沒有用到它。
static_cast 是個「雜物袋」:沒有其他適當的轉型運算子可用時,就用這個。它最接近傳統的C 轉型動作。


傳統的C 轉型動作仍然合法,但是新的轉型運算子比較受歡迎。它們更容易在程式碼中被識別出來(不論是對人類或是對諸如grep 等工具而言),而且愈是縮小範圍地指定各種轉型運算子的目標,編譯器愈有可能診斷出錯誤的運用。例如,只有const_cast 才可以用來將某物的常數性(constness)轉換掉。如果你嘗試使用其他轉型運算子來轉換物件或指標的常數性,一定會踢到鐵板。

欲知這些新式轉型動作的更多資訊,請看條款M2,或查閱較新的C++ 語言書籍。 M 代表More Effective C++,是我的另一本書。
600000 2002-10-13
  • 打赏
  • 举报
回复
各位,能否就一个小例子来辅助说明一下呢?
600000 2002-10-13
  • 打赏
  • 举报
回复
你的例子就是通过static_cast将string指针转换成了string指针,这有什么意思呢?我有点看不懂呀?
能再解释一下吗?
600000 2002-10-13
  • 打赏
  • 举报
回复
看了后有点了解了,但好像不是很深刻!
为了帮助了解,我将上面的内容翻为简体的:

Effective C++的导读中有这些话:
新特性其实有四样东西,分别是static_cast, const_cast, dynamic_cast, reinterpret_cast 四个转型运算子。传统的C 转型动作如下:


(type) expression // 将expression 转为type 型别
新的转型动作则是这样:


static_cast(expression) // 将expression 转为type 型别
const_cast(expression)
dynamic_cast(expression)
reinterpret_cast(expression)

这些不同的转型运算子有不同的作用:
const_cast 用来将对象或指针的常数性(constness)转型掉,我将在条款21验证这个主题。
dynamic_cast 用来执行「安全的向下转型动作(safe downcasting)」,这是条款39 的主题。
reinterpret_cast 的转型结果取决于编译器— 例如在函式指针型别之间做转型动作。你大概不常需要用到reinterpret_cast。本书完全没有用到它。
static_cast 是个「杂物袋」:没有其它适当的转型运算子可用时,就用这个。它最接近传统的C 转型动作。


传统的C 转型动作仍然合法,但是新的转型运算子比较受欢迎。它们更容易在程序代码中被识别出来(不论是对人类或是对诸如grep 等工具而言),而且愈是缩小范围地指定各种转型运算子的目标,编译器愈有可能诊断出错误的运用。例如,只有const_cast 才可以用来将某物的常数性(constness)转换掉。如果你尝试使用其它转型运算子来转换对象或指针的常数性,一定会踢到铁板。

欲知这些新式转型动作的更多信息,请看条款M2,或查阅较新的C++ 语言书籍。 M 代表More Effective C++,是我的另一本书。
caitou123 2002-10-10
  • 打赏
  • 举报
回复
用dynamic_cast时,要在编译选项中加入/Gr。否则会报错的
mattrew 2002-10-10
  • 打赏
  • 举报
回复
dynamic_cast动态类型转换
static_cast静态类型转换
typeid自类型定义


Againstwind 2002-10-10
  • 打赏
  • 举报
回复
dynamic_cast:动态类型转换
static_cast:静态类型转换
typeid:类型定义


是这样吧?!希望别说错了,具体情况查一下笔记再说!!!
No9 2002-10-10
  • 打赏
  • 举报
回复
记得好像有篇文章上说它们是用于实现RTTI机制的,具体内容就记不得!
dy_paradise 2002-10-10
  • 打赏
  • 举报
回复
我没看过,关注
一大梨 2002-10-10
  • 打赏
  • 举报
回复
dynamic_cast用于安全地沿着继承的关系向下进行类型转换。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧