#include <stdio.h>
int main(){
const int a = 10;
*(int*)(&a) = 9; // modify a
printf("%d", a);
return 0;
}
为什么?
答案 0 :(得分:8)
此程序将进行编译,但会显示未定义的行为,可能会输出9
或10
或其他内容,或者可能会崩溃谁知道。
当您说a
为const
时,您承诺您不会尝试直接或间接更改a
的值,并且编译器可能会做出某些假设。如果你违背诺言,可能会发生意想不到的事情。
答案 1 :(得分:5)
问:为什么?
要解释一下,如果您尝试通过某个<xsl:choose>
<!-- if decimal, do not add quotes -->
<xsl:when test=". castable as xs:decimal">
<xsl:value-of select="."/>
</xsl:when>
<!-- if boolean, do not add quotes -->
<xsl:when test=". castable as xs:boolean">
<xsl:value-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:text>"</xsl:text><xsl:value-of select="."/><xsl:text>"</xsl:text>
</xsl:otherwise>
</xsl:choose>
指针访问来修改function chl(){
var name= document.getElementByID('name').value;
$.ajax({
type:"post",
url:"hi.php",
data:{name:name},
success: function(html){
alert ("success");
}
});
return false;
}
变量值,则会调用undefined behaviour。
根据const
标准,第6.7.3章,第6段。
如果尝试通过使用具有非const限定类型的左值来修改使用const限定类型定义的对象,则行为未定义。
注意:non-const
的推荐签名为C11
。
答案 2 :(得分:0)
const关键字用于不更改变量的值。如果强行完成结果可能会出乎意料