[英]c++ initialize char array of size “static * int” in template function
是否可以使用static * int包含的大小來初始化模板函數內部的char數組?
.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)
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.