gpt4 book ai didi

c++ - 为什么在将超出范围的值分配给变量时由编译器决定分配什么值

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:05:00 27 4
gpt4 key购买 nike

在 C++ Primer 4th edition 2.1.1 中,它说“将超出范围的值分配给有符号类型时,由编译器决定分配什么值”。

我看不懂。我的意思是,如果您有类似“char 5 = 299”的代码,编译器将生成类似“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

“(VC),那么现在编译器如何决定会发生什么?我认为现在由 CPU 决定。

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

最佳答案

要不要让CPU来决定,由编译器决定。 :)

C++ 标准规定了程序的行为方式。编译器确保实现此行为。如果你做了一些标准没有指定的事情,那么编译器可以做任何它喜欢的事情。它可以生成错误消息、向您的祖母发送电子邮件或破解您的银行帐户。或者它无论如何都可以生成代码,是的,接下来会发生什么取决于 CPU。

但重点是 CPU 不负责确保您的程序按照 C++ 标准指定的方式运行。编译器是。因此,编译器应该如何处理与标准的任何偏差(即使它通常会选择不做任何特别的事情,这仍然是编译器的决定)

关于c++ - 为什么在将超出范围的值分配给变量时由编译器决定分配什么值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2980822/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com