看來在函數中傳遞的參數不能保持它們的const屬性。 假設我需要使用函數內參數的信息來初始化const變量,然後創建一個數組類型。我能怎麼做?如何在函數中傳遞const變量?
例如:
#include <array>
using namespace std;
void foo(const int info)
{
const int num = info + 1; // seems num cannot be constant
array<int, num> arr;
}
編譯錯誤:
test.cpp: In function ‘void foo(int)’:
test.cpp:8:16: error: the value of ‘num’ is not usable in a constant expression
array<int, num> arr;
^
test.cpp:7:15: note: ‘num’ was not initialized with a constant expression
const int num = info + 1; // seems num cannot be constant
^
更新:使用數組類型會造成這樣的麻煩,但使用簡單類型數組 只是確定:
void foo(int info)
{
int array[info];
}
是不是info
應該在編譯期間分配?
什麼是你得到實際的編譯器錯誤?請注意,您不能使用運行時變量作爲模板參數參數(「const」與「constexpr」不同)。 – Dai
如果你想用它作爲數組的大小,Num需要是編譯時常量嗎? 'const'意味着它不能被重新分配,而不是它在編譯時是一個常量。afaik – Carcigenicate
std :: array需要一個編譯時常量。函數參數不能是編譯時常量。你需要std :: vector來代替。 –