C++ 当值为非常量但使用常量表达式初始化时,是否使用constexpr?
由于某些原因,我很难掌握如何正确使用C++ 当值为非常量但使用常量表达式初始化时,是否使用constexpr?,c++,c++11,constexpr,C++,C++11,Constexpr,由于某些原因,我很难掌握如何正确使用constexpr 标题中描述的情况是否适合使用?i、 e: 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> bu
constexpr
标题中描述的情况是否适合使用?i、 e:
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, ' ');
}
//...
}
void foo()
{
静态constexpr const size\u t MAX\u BUFFER\u size=20*1024*1024;
constexpr size\u t bufferSize=1024*1024;//用常量表达式初始化
标准::向量缓冲区(缓冲区大小,”);
//...
if(某些条件())
{
bufferSize=get_random_value_at_runtime();//分配了一个新的“non-constexpr”值
buffer.resize(bufferSize',);
}
//...
}
亲切的问候
标题中描述的情况是否适合使用
错
constexpr size_t bufferSize = 1024 * 1024; // Initialized with constant expression
// ...
bufferSize = get_random_value_at_runtime();
constexpr
意味着(也是)const
您不能重新分配
const
变量。有趣的是,阅读中的答案让我觉得它们彼此完全独立。@notanalien在您的链接答案中,我什么时候可以/应该同时使用const和constexpr?A.在对象声明中。当两个关键字都引用要声明的相同对象时,这是不必要的。constexpr意味着const。这与max66所说的相同。@notanalien-当它们用于结构/类的方法(成员函数)时,它们可以是独立的,但只能从C++14开始;在C++11中,constexpr方法也是const
。无论如何,一个constepr
变量(也是C++14和C++17)也是const
。