C++;部分类型安全语言吗? 在C++中,有一些类型是安全的,而不是其他一些特性。 < C++安全性示例: char c = 'a'; int *p = &c; // this is not allowed (compiler error) 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! 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++的类型安全性缺失: char c = 'a'; int *p = &c; // this is not allowed (compiler error) 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! 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++不是一种类型安全的语言。我能认为它是非类型安全的语言,或者说它是一种部分类型安全的语言更准确吗?< /P> < P>它是合理的和实际的有意义的说C++是一种部分类型安全的语言。
C++最初是20世纪70年代中后期C语言的扩展,它被设计成一种高级可移植汇编语言,使Unix更易于移植和维护。C++为其新特性添加了类型安全性,但其目标是主要兼容C(特别是使用所有现有的C库,包括其头)。C的原始核心必须保留原样。C++;部分类型安全语言吗? 在C++中,有一些类型是安全的,而不是其他一些特性。 < C++安全性示例: char c = 'a'; int *p = &c; // this is not allowed (compiler error) 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! 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++的类型安全性缺失: char c = 'a'; int *p = &c; // this is not allowed (compiler error) 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! 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++不是一种类型安全的语言。我能认为它是非类型安全的语言,或者说它是一种部分类型安全的语言更准确吗?< /P> < P>它是合理的和实际的有意义的说C++是一种部分类型安全的语言。,c++,C++,C++最初是20世纪70年代中后期C语言的扩展,它被设计成一种高级可移植汇编语言,使Unix更易于移植和维护。C++为其新特性添加了类型安全性,但其目标是主要兼容C(特别是使用所有现有的C库,包括其头)。C的原始核心必须保留原样。 特别是C++在C++中从C.中得到数组指针的衰减,它不是类型安全的,因为它允许从代码>派生< /COD>数组到指针的“代码< >代码> >,它可以被索引但不明确的行为。在这里: C++的类型安全性缺失: char c = 'a'; int *p = &c;
<>特别是C++在C++中从C.中得到数组指针的衰减,它不是类型安全的,因为它允许从<>代码>派生< /COD>数组到指针的“代码< >代码> >,它可以被索引但不明确的行为。在这里:
C++的类型安全性缺失:
char c = 'a';
int *p = &c; // this is not allowed (compiler error)
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!
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!
在该示例中,*p
是一个int
,您将为其分配一个编号12345
,该编号也是一个int
编译器不允许您违反类型系统,因为您正在将一个int
赋值给另一个int
为获取int
s而取消引用的指针未初始化,这可能会导致崩溃,但与类型安全无关
这不会崩溃:
int* p = new int;
*p = 12345;
在这里,您正在将一个int
(12345
)写入另一个int
(*p
),但这次您正在写入的int
)实际上存在
编译器不能检查它是指针的安全性,它不是<强> > >类型安全。
我想说,第二个例子与类型安全无关。这只是一个普通的未定义行为。C++是一种类型安全的语言,不混合概念。类型安全涉及类型,解除对无效指针的引用与类型无关。@Hurkyl如果在我的第二个示例中,我为p
分配了int
值(例如:int*p=12345
),并且编译器允许,这是否被认为违反了类型安全性?@Tom,你从没说过这是一个int
。它只是一个可以是任何类型的十进制整数。如果你不介意的话,我还有一个关于类型安全性的问题,如果我有一个int
变量(int I=12345
),然后我试着把这个int
变量当作函数指针(I()
),现在编译器当然会阻止我这样做。这是因为我试图将I
作为函数指针处理时违反了类型安全性,还是这与类型安全性无关?@Tom Yes这是类型违反。类型确定可以对对象执行哪些操作。