English 中文(简体)
什么是类型安全,什么是“类型的安全”替代物? [复制]
原标题:What is type safety and what are the "type safe" alternatives? [duplicate]
问题回答

类型安全意味着汇编者可以检查你是否重新使用正确的类型。 例如,如果你重新使用<条码>(f>)的话,你可以无意中通过书面方式破坏你的方案:

printf("The meaning of life is %s", 42);

因为42个是愤怒的,而不是扼杀。

如果变量是正确的类型,则类型安全规范了汇编者检查的使用情况。 C在数据类型安全方面非常松散,例如,在ANSI C标准中实际上就是这样,即数据类型(<代码>char>/代码>)的类型升级将发生。

char ch = 32; /* that is a space character accordingly to ASCII */
int n = ch + 3;

通知<代码>ch 变数升至<代码>int。 这是正当的,但如果是你所暗示的,则需要更仔细的检查。

诸如C#汇编者等竞争者将不允许这种情况发生,这就是为什么在C使用投放者的原因,例如:

int n = (int)3.1415926535f;

单单单是一纸面价值,即:<代码>n的价值为3。

以上说明这种类型的安全,C在这方面非常松散。

现代语言的类型安全更为严格,例如 Java、C#,以限制变量的使用和意义。 PHP是松散打的极好例子,你可以这样做:

$myvar = 34;
$myvar = $myvar + "foo";

页: 1 a 愤怒,或者它是浮动点,或者是一种扼杀。 这里的类型安全并不十分清楚,什么是可能导致争.的意图,什么是试图说明正在发生的事情的令人高兴的总结会。

希望这一帮助

“Type safety”是指,汇编者检查你正在做正确的事时,其类型是正确的(例如,如果你试图将香蕉视为“ Orange”,或对期望产生愤怒的职能加以扼杀,就会引发汇编错误)。

类型安全(主要是)从窗户外走,到void*的照片中去,是能够指出任何东西(完全不了解所涉类型)的指点,而语文则完全由方案人操作(例如,void*)。 没有什么好处,除非被 cast回原样;它可以代表任何东西,但你们必须知道可以使用的东西。

不安全的类型还涉及诸如印刷机之类的蒸aria功能(汇编者不注意其中有多少论点及其类型——同样应由打电话者确保显示方式符合论点及其类型)。

肉类(阵列和集装箱)的替代物是std:copy in <algorithm>——如果所涉所有类型都符合某些要求,则可以按运动方式实施——如果某些类别的人绕过其公共接口,仅仅去,转过或翻转,则可以打破某些类别(例如,如果你用纸浆复制件复制件复制件复制件复制件,则会错做。

替代C I/O常规的类型安全选择是流体(如果你想要展示格式的好处,boost:format)。

这意味着,如果你试图以某种方式使用某种类型,使汇编者不会产生警告。 例如,以下行为不明确,在实践中,将点人的范围复制到浮标线上,这些轨道绝对没有任何意义。 如果sizeof(char*) >sizeof(float),它将超出f寿命的任何记忆地点。

float f;
char *c = someString();
memcpy(&f, &c, sizeof(char*));

薄膜功能的签名是

void *memcpy (void* destination, const void* source, size_t num);

你们可以看到,它没有假定与复印件有关的点人,他们只是点人。 因此,如果你想要将一系列的<代码>ints复制到一系列的<代码>floats汇编者就赢得了这方面的抱怨。

Type Safety是一种工具,有助于开发商避免某些错误,防止汇编某种错误的代码(并延迟执行)。 它对源代码的顺序进行了分析,以检查一般类型和类型之间的转换是否为宇宙。

这意味着什么? 这意味着,如果您的方案通过类检查阶段。 您可以肯定不会产生CERTAIN KIND的错误。

当然,你有时需要迫使不要进行这种检查,这说明你为什么可以把事情强加于人。 关于另一个例子,malloc: 定义

void* malloc (size_t size);

如果你想为<代码>floats指定一个联络点,例如:

float* ptr = (float*)malloc(sizeof(float*)*COUNT);

页: 1 TYPE CHECK FAIL!

因此,<代码>memcpy不是类型安全。 它检查任何东西,只是从点到另一点。

类型安全是指一种编码模式,可强制每个变量在汇编时间具有专用类型,例如:int a = 4;双重d = 100.0; 构件{char s;} mystruct; 变量类型永远不会消失。 如果你想要改变其类型,就必须界定明确或默示的转换。

not/em> a. 类型,因为你在诉讼案中通过论点:

float f = 1.f;
printf("This is a float: %f
And this is a string: %s",f,f);

<代码>f功能不知其收到何种价值。 说明格式用于发现,但如果说明错误,则执行无法发现,因为在汇编时没有哪类信息。 The above f 电话最有可能造成灾难性的后果——印刷版预计有第二参数的铺面,但还是有浮动点。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?