我在标准中哪里可以找到关于*p和p[0]、*(p+1)和p[1]之间等价性的引用.
Where can I find in the Standard a reference to the equivalence between *p and p[0], *(p+1) and p[1], ...?
在下面的代码段中,符号*p
等效于p[0]
,*(p + 1)
等效于p[1]
,依此类推
int* p = new int[3] { 1, 2, 3};
cout << *p << ' ' << *(p + 1) << ' ' << *(p + 2) << 'n';
cout << p[0] << ' ' << p[1] << ' ' << p[2] << 'n';
在标准中,我在哪里可以找到这种等效性的参考?
这在C++14标准草案第5.2.1节订阅[expr.sub](emphasis mine(:中有介绍
后缀表达式后跟方括号中的表达式是后缀表达式。其中一个表达式应具有类型"T的数组"或"指向T的指针",另一个应具有无范围枚举或积分型。[…]表达式E1[E2](根据定义(与*(((E1(+(E2((相同[注:有关*和+阵列的详细信息见8.3.4--尾注],
本段引用了*
的5.3
部分,其中写道:
一元*运算符执行间接操作:应用它的表达式应是指向对象类型,或指向函数类型的指针,结果是引用该对象或函数的左值表达式所指向的。如果表达式的类型是"指向T的指针",则结果的类型为"T."[…]
以及CCD_ 8的CCD_
当具有整型的表达式被添加到指针或从指针中减去时,结果的类型为指针操作数的。[…]如果表达式P指向数组对象的第i个元素,表达式(P(+N(等价地,N+(P((和(P(-N(其中N的值为N(分别指向阵列的第i+N个和第i−N个元素对象,前提是它们存在[…]
C++14:
5.2.1订阅
相关部分:
1。。。这个表达式
E1[E2]
(根据定义(与*((E1)+(E2))
相同。。。
5.3.1一元运算符
相关部分:
1一元
*
运算符执行间接操作:应用它的表达式应是指向对象类型,或指向函数类型的指针,结果是引用该对象或函数的左值表达式所指向的。如果表达式的类型为"指向T
的指针",则结果的类型为"T
."…
5.7加法运算符
相关部分:
5。。。换句话说,如果表达式
P
指向数组对象的第i个元素,表达式(P)+N
(相当于N+(P)
(和(P)-N
(其中N
的值为n(分别指向阵列的第i+n-个和第i−n>个元素对象,只要它们存在。。。
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 构造函数和转换运算符之间的重载解析
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数