c++ - 两个指针合法的 c++17 常量表达式之间的区别是什么?

标签 c++ language-lawyer c++17 constant-expression

根据 cppreference 核心常量表达式部分 19) 两个指针之间的减法运算符不是合法的常量表达式直到 c++14。我可以假设以下代码是合法的 c++17 代码还是这种解释是一种滥用?

int X, Y;

template <long long V>
struct S { };

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

最佳答案

这个问题没有实际意义。指针算法只定义在属于同一个数组的指针上,当然不是这样。所以,上面的代码是合法的 C++,事实上,无法使用我可用的编译器进行编译。

关于c++ - 两个指针合法的 c++17 常量表达式之间的区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41451930/

相关文章:

rust - 对于所有类型 `T` 、 `U` 是否真的,如果 `T` 被强制转换为 `U` 那么 `&T` 被强制转换为 `&U` ?

C++ 标准 : end of lifetime

c++ - 在UB中执行多个后缀表达式(下标)评估结果

c++ - std::reference_wrapper<std::any> 上的类型特征

c++ - ICU 自定义货币格式 (C++)

c++ - 不同架构下的va_list初始化

c++ - 具有原始类型的单个数组成员的标准布局结构的保证内存布局

c++ - 如何将超链接和用户可点击操作添加到 qtextbrowser

c++ - 如何在带有CRTP模式的派生类中使用聚合初始化?

c++ - 如何在 constexpr string_view 上使用 std::string_view::remove_prefix()