是否可以初始化模板函数内的char数组,其大小包含在静态* int?
中.header
static int * array_size;
template <class T>
void f(T value)
{
char buffer[*array_size];
}
或者有没有办法初始化&#34; array_size&#34;以便模板具有使用的默认值?
答案 0 :(得分:3)
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)
答案 1 :(得分:0)
array_size的Qualifyer必须是常量,否则你将以期望的常量表达式结束。静态关键字无关紧要。
const int array_size = 42;
char buffer[array_size];
即使指针指向const
,指针解除引用也不起作用const int a = 42;
int const * const array_size = &a;
char buffer[array_size]; // error C2057: expected constant expression
您也可以通过模板参数粘贴array_size:
template <class T, int array_size>
void f(T value)
{
char buffer[array_size];
}
f<int, 42>(100);