C++ skills record
Note from daily use.
C++11
decltype
字面意思类型获取,可通过表达式分析出结果类型。
参考:https://www.cnblogs.com/cauchy007/p/4966485.html
引申:追踪返回类型
1 | template <typename T1, typename T2> |
编译通过,执行时根据decltype(t1 + t2)
判断类型,结合auto实现自动判断函数返回类型。
宏
ANSI C标准中有几个标准预定义宏(也是常用的):
__LINE__
:在源代码中插入当前源代码行号;__FILE__
:在源文件中插入当前源文件名;__DATE__
:在源文件中插入当前的编译日期__TIME__
:在源文件中插入当前编译时间;__STDC_
_`:当要求程序严格遵循ANSI C标准时该标识被赋值为1;__cplusplus
:当编写C++程序时该标识符被定义。以上宏在编译时被替换,像DATE、TIME是被固定的,企图用在日志名字是不现实的
##
允许可变参数为空,如#define CLOG(format, ...) consoleString(format, ##__VA_ARGS__);
,不加##
时若CLOG(“haha”)会出错。
char & string
_TRUNCATE
_TRUNCATE 指定字符串截断行为;尽可能保留字符串并不产生错误。
1 | char src[] = "1234567890"; |
- dst_len > strlen(src) , err = strlen(src);
- dst_len <= strlen(src)
- 不使用_TRUNCATE,程序奔溃出错;
- 使用_TRUNCATE,err = -1,dst保留最大字符串。
使用 err = strncpy_s(dst, _countof(dst), src, _TRUNCATE);
情况相同;
- dst_len > strlen(src) , err = 0;
- dst_len <= strlen(src)
- 不使用_TRUNCATE,使用_countof(src),程序奔溃出错;
- 使用_TRUNCATE,err = STRUNCATE,dst保留最大字符串。