【问题标题】:Clarification regarding need for fixed address in context of constexpr pointers and references关于在 constexpr 指针和引用的上下文中需要固定地址的说明
【发布时间】:2017-11-26 10:58:10
【问题描述】:

在 Primer 中(在学习 constexpr 时)我发现:

在函数内部定义的变量 通常不会存储在固定地址。因此,我们不能使用 constexpr 指向此类变量的指针

  1. 它对编译时计算的所有值都有效还是只是使用关键字constexpr的约束?
  2. const 关键字是否不能确保在编译时确定对象(评估其值),尽管它是由文字初始化的?
  3. 为什么要用constexpr关键字定义一些引用:

          int i=9;   //Declared as global variable
          constexpr int &ref=i;
    

因为constexpr 意味着顶级constness,这意味着ref 将是恒定的(即使不使用constexpr 也是如此,因为我们不能引用任何其他变量)并且它未能提供const 引用的内容?

【问题讨论】:

  • const 根本不能保证太多(因为有const_cast

标签: c++ c++11


【解决方案1】:

您似乎有一些误解。

constexpr 值几乎是唯一表现得像编译时常量的值。因此,在第一季度,您正在做出不存在的区别。您可以将任何地址存储在常规的const 指针中,即T* const

Q2 几乎是同样的误解。您可以将用户的输入存储在const std:: string 中。这只意味着您以后不能更改字符串。

Q3 只是语言没有试图禁止不必要的事情的一个例子。您还可以做一百万件其他多余的事情。

【讨论】:

    猜你喜欢
    • 2019-06-11
    • 2019-10-15
    • 2011-03-14
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2018-12-23
    • 2010-12-18
    • 2013-08-16
    相关资源
    最近更新 更多