簡體   English   中英

C ++在模板函數中初始化大小為“ static * int”的char數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM