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++标准的规定运行.编译器是.因此,编译器应该如何处理与标准的任何偏差(即使它通常会选择不执行任何特殊操作,这仍然是编译器的决定)