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++安全性示例: 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++最初是20世纪70年代中后期C语言的扩展,它被设计成一种高级可移植汇编语言,使Unix更易于移植和维护。C++为其新特性添加了类型安全性,但其目标是主要兼容C(特别是使用所有现有的C库,包括其头)。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这是类型违反。类型确定可以对对象执行哪些操作。