为什么不识别以下文字操作员模板?
template<char... Chars>
constexpr int operator"" _p(){
return 0;
}
int main()
{
int fs1 = "123"_p;
}
更新的 感谢我现在使用的答案:
#include <avr/pgmspace.h>
template<typename C, C... CC>
struct PgmString {
static constexpr const char* str(){
return &data[0];
}
static constexpr const char data[] PROGMEM = {CC..., '\0'};
};
template<typename C, C... CC>
constexpr const char PgmString<C, CC...>::data[] PROGMEM;
template<typename C, C... CC>
constexpr PgmString<C, CC...> operator"" _pgm(){
return PgmString<C, CC...>();
}
这会将字符串放入AVR微控制器的闪存中。 但是如果我将文字字符串长度增加一个字符,则使用的闪存大小会增加两(!)个字节。
答案 0 :(得分:6)
gcc / clang的扩展程序允许:
template<typename Char, Char... Cs>
constexpr int operator"" _p(){
return 0;
}
然后
int main()
{
int fs1 = "123"_p;
}
答案 1 :(得分:5)
您期望的文字形式不存在。只有整数和浮动文字才有模板形式;字符串和字符文字没有。