我試圖與constexpr和static_assert一起玩。實際上我需要檢查一個constexpr字符串的長度,它是由一個專用函數計算的。這裏就是我試圖運行:使用constexpr和函數
#include <iostream>
using namespace std;
class Test
{
private :
static constexpr char str[] = "abc";
static int constexpr constStrLength(const char* str)
{
return *str ? 1+constStrLength(str+1) : 0;
}
static constexpr int length = constStrLength(str);
static_assert(length ==3, "error");
public :
static void f()
{
cout << len << endl;
}
};
int main()
{
Test::f();
return 0;
}
,這裏是錯誤,我得到:
error: 'static constexpr int Test::constStrLength(const char*)' called in a constant expression static constexpr int len = constStrLength("length ");
什麼是實現這一目標的正確方法?
感謝您的幫助!
你的字符串總是初始化爲char str [] =「...」'?因爲在這種形式下你可以簡單地將長度定義爲sizeof(str)-1'。 – kennytm
@kennytm:除非這樣做會產生錯誤的結果。例如,'sizeof(「abc \ 0def」) - 1'產生'7',而'constStrLength()'函數產生'3'。 –
我的字符串總是像這樣定義的,但實際上我需要防止在字符串中包含\ 0字符的錯誤行爲。但是,謝謝你的提示;) –