首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >说C++是一种部分类型的安全语言是准确的吗?

说C++是一种部分类型的安全语言是准确的吗?
EN

Stack Overflow用户
提问于 2016-10-02 04:27:55
回答 2查看 1K关注 0票数 3

C++中有些特性是类型安全的,而其他一些特性则不是。

C++类型安全示例:

代码语言:javascript
复制
char c = 'a';
int *p = &c;    // this is not allowed (compiler error)

C++缺乏类型安全性的示例:

代码语言:javascript
复制
int *p;        // I don't have to initialize p, and so it will have some junk/random value
*p = 12345;    // this will probably lead to segmentation fault!

我在几篇文章中读到C++不是一种类型安全的语言。我是否可以认为它是一种非类型的安全语言,或者说它是一种部分类型的安全语言是否更准确?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-02 04:38:49

说C++是一种部分类型的安全语言是合理的,也是有实际意义的。

C++最初是对上世纪70年代中期到后期的C语言的扩展,它被设计成一种高级的便携汇编语言,以使Unix更可移植,更易于维护。C++为其新特性增加了类型安全性,但为了主要与C兼容(特别是使用所有现有的C库,包括它们的头),C的原始核心必须保持原样。

特别是,C++使数组从C到指针的衰减。在C++中,它不是类型安全的,因为它允许从Derived数组隐式转换到指针到Base,这反过来可以被索引,但具有未定义的行为。

票数 2
EN

Stack Overflow用户

发布于 2016-10-02 09:01:07

你给出的例子一点也不违反“类型安全”。在此:

C++缺乏类型安全性的示例: int *p;// i不需要初始化p,因此它将有一些垃圾/随机值*p = 12345;//这可能会导致分段错误!

在这个例子中,*p是一个int,您要给它分配数字12345,它也是,也是,一个int

编译器不允许您违反类型系统,因为您将一个int分配给另一个int

您取消引用的指向某个int的指针没有初始化,这会导致潜在的崩溃,但它与类型安全性无关。

这不会崩溃:

代码语言:javascript
复制
int* p = new int;
*p = 12345;

在这里,您正在将一个int (12345)写入另一个int (*p),但这一次您要写入的int (*p)实际上是存在的。

编译器未能检查的是而不是类型安全,这是指针的完整性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39813866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档