为什么由编译器决定在为变量赋予超出范围值时要分配的值

Bre*_*t81 1 c c++ compiler-construction assembly

在C++ Primer第4版2.1.1中,它说"在为签名类型分配超出范围的值时,由编译器来决定分配什么值".

我无法理解.我的意思是,如果您有"char 5 = 299"之类的代码,编译器将生成asm代码,如" mov BYTE PTR _sc$[ebp], 43"(VC)或" movb $43, -2(%ebp)"(gcc + mingw),它由编译器决定.

但是如果我们分配一个由用户输入给出的值呢?比如,通过命令行?生成的asm代码将是" movb %al, -1(%ebp)"(gcc + mingw)和"

mov cl, BYTE PTR _i$[ebp]
mov BYTE PTR _sc$[ebp], cl
Run Code Online (Sandbox Code Playgroud)

"(VC),那么现在编译器如何决定会发生什么?我想现在它是由CPU决定的.

你能给我一个明确的解释吗?

jal*_*alf 12

由编译器决定是否让它由CPU决定.:)

C++标准指定了程序的行为方式.编译器确保实现此行为.如果您执行标准未指定的操作,则编译器可以执行任何喜欢的操作.它可能会产生错误消息,向您的祖母发送电子邮件或破解您的银行帐户.或者它无论如何都可以生成代码,是的,然后由CPU决定接下来会发生什么.

但重点是CPU不负责确保您的程序按照C++标准的规定运行.编译器是.因此,编译器应该如何处理与标准的任何偏差(即使它通常会选择不执行任何特殊操作,这仍然是编译器的决定)