C++ “(T*)0-(T*)0”是否定义为0?
考虑以下代码:C++ “(T*)0-(T*)0”是否定义为0?,c++,c,pointers,language-lawyer,C++,C,Pointers,Language Lawyer,考虑以下代码: #include <iostream> int main() { int *a = 0, *b = 0; std::cout << (a - b); } #包括 int main() { int*a=0,*b=0; STD:C++中的CUT< P>,参见: 如果两个指针[…]都为空,则两个指针都为空 减去后,结果比较等于转换为的值0 类型std::ptrdiff\u t (这也适用于,缩短了本段。) 在C11中,行为显然未根据6.5.6
#include <iostream>
int main()
{
int *a = 0, *b = 0;
std::cout << (a - b);
}
#包括
int main()
{
int*a=0,*b=0;
STD:C++中的CUT< P>,参见:
如果两个指针[…]都为空,则两个指针都为空
减去后,结果比较等于转换为的值0
类型std::ptrdiff\u t
(这也适用于,缩短了本段。)
在C11中,行为显然未根据6.5.6/9进行定义:
减去两个指针后,两个指针都应指向
相同的数组对象,或数组对象的最后一个元素后一个元素;
结果是两个数组的下标不同
元素
链接到谷歌缓存网站,因为open-std.org似乎(再次)旧的问题明确地局限于C++和C++的旧版本。这个问题吸引了更多的现代版本的答案,所以我投票赞成重新开放。@ AdRiangMcCasy不确定我会遵循。对于C++03和C++11版本的标准,源代码是这个问题的唯一答案