我需要在C ++中定义一个字符。现在我有:
#define ENQ (char)5
有没有办法定义一个类似于如何使用l
后缀定义long的字符(例如5l
)?
答案 0 :(得分:5)
强制转换,它没有运行时影响,但您可以使用\x
转义序列直接定义任何值的字符常量,以十六进制字符代码指定字符 - 对于非打印或扩展字符。
#define ASCII_ENQ `\x5`
但是在C ++中你最好使用const
(具有显式类型):
static const char ASCII_ENQ = 5 ;
或
static const char ASCII_ENQ = '\x5' ;
如果您努力寻求完整的类型协议(非必要)。
答案 1 :(得分:1)
例如,字符文字'a'
:
#define ALPHA 'a'
#define FIVE_CHAR '5'
答案 2 :(得分:1)
你也可以使用User-defined literals并写下这样的内容:
#include <iostream>
const char operator ""_ch( unsigned long long i) {
return i;
}
int main() {
char enq = 5_ch;
char alpha = 65_ch;
cout << alpha << '\n';
return 0;
}
但对于你可以更容易表达的东西来说,这有点过分:
const char ENQ = 5;
除非你真的试图做一些棘手的事情:
#include <iostream>
// convert a number (a figure) to its ASCII code
const char operator ""_ch( unsigned long long i) {
return i < 10 ? i + 48 : 48;
}
int main() {
char num_as_char = 5_ch;
std::cout << num_as_char << '\n';
// which outputs 5
return 0;
}