是否可以在模板函数中初始化一个 char 数组,其大小包含在 static * int 中?
.header
static int * array_size;
template <class T>
void f(T value)
{
char buffer[*array_size];
}
或者有没有办法初始化“array_size”,使模板有一个默认值可以使用?
最佳答案
static int * array_size
将不起作用,因为指针内的数据是可修改的,因此无法在编译时确定。
如果您使用的是 C++11,我建议您
constexpr int array_size = 42;
如果您不会使用 C++11,我会使用:
static const int array_size = 42;
在这两种情况下,您都可以像这样创建缓冲区:
char buffer[array_size];
所以没有星号。
如果您无法在编译时找出缓冲区的大小(因此大小取决于运行时的决定),您需要使用动态数组,最好封装到 std::vector
:
std::vector<char> bufferVec(myDynamicSize); // Use any integer you want to
char *buffer = &bufferVec[0]; // Use this buffer as a standard array
// with size myDynamicSize OR use the std::vector
// directly (much cleaner)
关于c++在模板函数中初始化大小为 "static * int"的char数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22987361/