C++中有些特性是类型安全的,而其他一些特性则不是。
C++类型安全示例:
char c = 'a';
int *p = &c; // this is not allowed (compiler error)C++缺乏类型安全性的示例:
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++不是一种类型安全的语言。我是否可以认为它是一种非类型的安全语言,或者说它是一种部分类型的安全语言是否更准确?
发布于 2016-10-02 04:38:49
说C++是一种部分类型的安全语言是合理的,也是有实际意义的。
C++最初是对上世纪70年代中期到后期的C语言的扩展,它被设计成一种高级的便携汇编语言,以使Unix更可移植,更易于维护。C++为其新特性增加了类型安全性,但为了主要与C兼容(特别是使用所有现有的C库,包括它们的头),C的原始核心必须保持原样。
特别是,C++使数组从C到指针的衰减。在C++中,它不是类型安全的,因为它允许从Derived数组隐式转换到指针到Base,这反过来可以被索引,但具有未定义的行为。
发布于 2016-10-02 09:01:07
你给出的例子一点也不违反“类型安全”。在此:
C++缺乏类型安全性的示例: int *p;// i不需要初始化p,因此它将有一些垃圾/随机值*p = 12345;//这可能会导致分段错误!
在这个例子中,*p是一个int,您要给它分配数字12345,它也是,也是,一个int。
编译器不允许您违反类型系统,因为您将一个int分配给另一个int。
您取消引用的指向某个int的指针没有初始化,这会导致潜在的崩溃,但它与类型安全性无关。
这不会崩溃:
int* p = new int;
*p = 12345;在这里,您正在将一个int (12345)写入另一个int (*p),但这一次您要写入的int (*p)实际上是存在的。
编译器未能检查的是而不是类型安全,这是指针的完整性。
https://stackoverflow.com/questions/39813866
复制相似问题