当前位置: 首页 > 知识库问答 >
问题:

创建一个指针是不是非数组指针的末尾一个,不是从一元运算符导出的&在C++17中是未定义的行为吗?

岳刚洁
2023-03-14

这段引文包括一个非规范性脚注:

不是数组元素的对象为此被认为属于单元素数组;见8.5.2.1

其中引用了8.5.2.1[expr.unary.op],讨论了一元&运算符:

void f(int a) {
    int* z = (new int) + 1; // undefined behavior
    int* w = &a + 1; // ok
}

共有1个答案

陈嘉荣
2023-03-14

是的,这似乎是标准中的一个bug。

int* z = (new int)+1; // undefined behavior.
int* a = new int;
int* b = a+1; // undefined behavior, same reason as `z`
&*a; // seeming noop, but magically makes `*a` into an array of one element!
int* c = a+1; // defined behavior!

这太荒谬了。

[...]不是以这种方式获取地址的数组元素的对象被认为属于具有一个T类型元素的数组

 类似资料: