相关疑难解决方法(0)

什么架构计算无效指针不安全?

int* a = new int[5] - 1;
Run Code Online (Sandbox Code Playgroud)

这一行本身根据C++标准调用未定义的行为,因为a是一个无效的指针而不是一个接一个的结尾.同时,这是制作基于1的数组(第一个元素是[1])的零开销方式,我需要用于我的项目.

我想知道这是否是我需要避免的,或者如果C++标准只是保守地支持一些奇怪的架构,我的代码永远都不会运行.所以问题是,这将是一个什么样的架构问题?这些广泛存在吗?

编辑:要查看上面的行确实调用了未定义的行为,请查看此问题.

编辑:Dennis Zickefoose指出,当调用未定义的行为时,允许编译器执行任何操作,因此编译器和CPU都必须提供超出C++标准的保证,以便像这样的代码工作.我正在将问题扩展到现代C++编译器是否存在这个问题.

c++ cpu-architecture

9
推荐指数
2
解决办法
579
查看次数

标签 统计

c++ ×1

cpu-architecture ×1