首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个指针之间的差异是合法的c++17常量表达式吗?

两个指针之间的差异是合法的c++17常量表达式吗?
EN

Stack Overflow用户
提问于 2017-01-03 20:37:09
回答 2查看 501关注 0票数 6

根据优先选择核心常量表达式( point 19),两个指针之间的减法运算符直到c++14才是合法的常量表达式。我是否可以假设以下代码是合法的c++17代码,或者这种解释是滥用的?

代码语言:javascript
运行
复制
int X, Y;

template <long long V>
struct S { };

int main() {
    S<&X - &Y> s;
    (void)s;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-03 20:40:03

这个问题是没有意义的。指针算法只定义在属于同一数组的指针上,当然不是这种情况。因此,上面的代码是而不是 legal C++,而且实际上无法用我可以使用的编译器进行编译。

票数 14
EN

Stack Overflow用户

发布于 2017-01-03 20:43:12

引用的cppref 文章

核心常量表达式是没有下列任何一项内容的任何表达式。 7)一个表达式,其计算结果导致任何形式的核心语言(自C++17以来)未定义的行为(包括有符号整数溢出、零除法、指针算法在数组边界s外)。未指定是否检测到标准库未定义的行为。(自C++17以来) 19)两个指针之间的减法运算符(直到C++14)

很可能,自c++14以来,数组边界内的数组ptr变量正在变得“合法化”,而不是所有指针算法都是合法的。

实际上,一个演示显示,即使使用c++11 (而不是c++98),数组ptr算法也可以编译。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41451930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档