首先,我看到了关于C99的这个问题,并且被接受的答案引用了C99标准草案中的“操作数未计算”措辞。我不确定这个答案适用于C++03。还有一个关于C++的问题,其被接受的答案引用了类似的措辞,并且还包括“在某些情况下,未计算的操作数会出现。未计算的操作数未被计算。”的措辞。
我有这段代码:
int* ptr = 0;
void* buffer = malloc( 10 * sizeof( *ptr ) );
问题是:在 sizeof()
内是否存在空指针取消引用(null pointer dereference)(因此 UB)?根据 C++03 5.3.3/1 的规定,sizeof 运算符产生其操作数对象的对象表示中的字节数。操作数可以是未评估的表达式或带括号的类型标识符。 所链接的答案引用了这个或类似的措辞,并利用“未被评估”的部分推导出没有 UB。
然而,我找不到标准在这种情况下将 评估 和具有或不具有 UB 相关联的确切位置。
在 C++ 中,在 sizeof 中使用“未评估”的表达式是否合法,能否取消引用 null 或无效指针?
if(0) { int*p; *p = 0;}
。 - CiaPan