2017-08-05 37 views
1

所以我寫這個代碼 - >編譯器傳遞一個常量變量時​​返回一個錯誤:模板參數不是一個常量表達式

#include <iostream> 
#include <bitset> 

int main(){ 

    int num, temp, digits = 0; 
    std::cin >> num; 
    temp = num; 

    while(temp){ 
     temp /= 10; 
     ++digits; 
    } 

    const int size = digits; 

    std::bitset<size> a(num); 
    std::cout << a << std::endl; 

    return 0; 
} 

位集容器心不是接受const的整數大小作爲參數,並引發錯誤 - Non-type template argument is not a constant expression。我想知道爲什麼會發生這種情況,因爲size已被聲明爲常量,並且在我的程序運行期間它的值不會改變?

+0

[Constexpr \'和\'const \'之間的區別](https://stackoverflow.com/questions/14116003/difference-between-constexpr-and-const) – LogicStuff

+0

改爲使用'constexpr' const的大小。您也可以將計算大小的代碼放在'constexpr'函數中。 –

回答

4

A const變量可以被解釋爲不同,具體取決於分配給它的內容。

  1. 當分配編譯時間常量:它將是一個編譯時間常量。這意味着在編譯過程中可以直接使用常量值。

  2. 當從另一個變量(不是編譯時間常量)分配時:新變量不可修改。在這個意義上,變量不是編譯時間常量。它不能在該代碼塊中修改。

模板需要編譯時間常量。

相關問題