c – 指针中的constexpr是否有所作为

c – 指针中的constexpr是否有所作为,第1张

概述constexpr int * np = nullptr和int const * np = nullptr有什么区别? 在两种情况下,np都是一个指向int的常量指针.在指针的上下文中是否有任何constexpr的特定用法. 如果您尝试对指针执行任何 *** 作并在常量表达式中使用结果,则必须将指针标记为constexpr.简单的例子是指针算术或指针解除引用: static constexpr int a constexpr int * np = nullptr和int const * np = nullptr有什么区别?

在两种情况下,np都是一个指向int的常量指针.在指针的上下文中是否有任何constexpr的特定用法.

解决方法 如果您尝试对指针执行任何 *** 作并在常量表达式中使用结果,则必须将指针标记为constexpr.简单的例子是指针算术或指针解除引用:
static constexpr int arr[] = {1,2,3,4,5,6};constexpr const int *first = arr;constexpr const int *second = first + 1; // would fail if first wasn't constexprconstexpr int i = *second;

在上面的例子中,第二个只能是constexpr,如果是第一个.类似地,如果第二个是constexpr,则第二个只能是一个常量表达式

如果尝试通过指针调用constexpr成员函数并将结果用作常量表达式,则调用它的指针本身必须是常量表达式

struct S {    constexpr int f() const { return 1; }  };int main() {    static constexpr S s{};    const S *sp = &s;    constexpr int i = sp->f(); // error: sp not a constant Expression}

如果我们改为说

constexpr const S *sp = &s;

那么上面的工作是有效的.请注意,上述(错误地)编译并使用gcc-4.9运行,但不是gcc-5.1

总结

以上是内存溢出为你收集整理的c – 指针中的constexpr是否有所作为全部内容,希望文章能够帮你解决c – 指针中的constexpr是否有所作为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1240290.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存