当值是非常量但使用常量表达式初始化时使用 constexpr?
Posted
技术标签:
【中文标题】当值是非常量但使用常量表达式初始化时使用 constexpr?【英文标题】:Using constexpr when a value is non-const but initialized with a constant expression? 【发布时间】:2018-10-30 14:36:02 【问题描述】:由于某种原因,我很难掌握如何正确使用constexpr
。
标题中描述的情况是否适合使用它?即:
void foo()
static constexpr const size_t MAX_BUFFER_SIZE = 20 * 1024 * 1024;
constexpr size_t bufferSize = 1024 * 1024; // Initialized with constant expression
std::vector<char> buffer(bufferSize, ' ');
//...
if (some_condition())
bufferSize = get_random_value_at_runtime(); // Assigned a new 'non-constexpr' value
buffer.resize(bufferSize, ' ');
//...
亲切的问候!
【问题讨论】:
【参考方案1】:标题中描述的情况是否适合使用它?
错了。
constexpr size_t bufferSize = 1024 * 1024; // Initialized with constant expression
// ...
bufferSize = get_random_value_at_runtime();
constexpr
暗示(也是)const
。
您不能重新分配 const
变量。
【讨论】:
有趣,阅读来自Difference betweenconstexpr
and const
的答案让我觉得它们完全相互独立。
@notanalien 在您的链接答案中,它有 我什么时候可以/应该同时使用 const 和 constexpr? A. 在对象声明中。当两个关键字都引用要声明的同一个对象时,这从来没有必要。 constexpr 暗示 const。 和 max66 说的一样。
@notanalien - 当它们用于结构/类的方法(成员函数)时,它们可以是独立的,但仅从 C++14 开始;在 C++11 中,constexpr
方法也是 const
。无论如何,constexpr
变量是曾经(也是 C++14 和 C++17)也是 const
。以上是关于当值是非常量但使用常量表达式初始化时使用 constexpr?的主要内容,如果未能解决你的问题,请参考以下文章