如果有一个函数不接受任何引用或指针作为参数,它的返回类型是未使用的,并且它不进行明显离开系统的调用(I/O 调用、更改系统时间等),它是否保证只修改定义它的类(或根本没有)?
我能想到的这条规则的唯一例外是:
void a(int b, int c){
*((int*)b) = c; }
int main() {
int d=1;
a((int)(&d),d+1);
return 0; }
可以保证定义吗?我知道int*
并且int
不必是相同的大小,但是如果它们被定义为相同的大小,这是否必须工作,或者它仍然是未定义的行为?
目的是看一个函数是否可以合法地优化出来(即如果你能证明它没有副作用,它可以被删除)。