constexpr int * np = nullptr和int const * np = nullptr有什么区别?
解决方法
如果您尝试对指针执行任何操作并在常量表达式中使用结果,则必须将指针标记为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 constexpr constexpr 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
原文地址:https://www.jb51.cc/c/118746.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。