知识点随手记,2024.08.31

1、VC中edit控件作为文本输出,如需支持显示换行,要做两件事,1是控件属性enable多行,2是拼接字符串时用回车换行"\r\n",光"\n"不行,用std::endl也不行。否则在edit控件中输出显示不换行了,合并为单行显示。

2、std::stringstream,用完一次,第二次用时要先清除前次的s.str()能获得的字符串,光用s.clear()不行,clear只清除了状态等,清除已有字符串要用s.str("")方法清空。

3、

01    Data* pData = &data; // Data为普通结构体。

02    uint8_t* p8t = static_cast<uint8_t*>(pData); // 错误cast

03    uint8_t* p8t = reinterpret_cast<uint8_t*>(pData); // 能行

但在

04    s << std::hex << "0x" << p8t; // stringstream

显示为空值,也不是0或null,就是空的,没值显示。(Win VC VS2019上运行,没试过Linux下不知道会如何)

05    s << std::hex << "0x" << static_cast<void*>(p8t);

这样能正确显示指针/地址值了。注意void*可使用static_cast,不需要reinterpret_cast。

05行成功,意味着前面03行也是对的。

4、RAII是 Resource Acquisition Is Initialization 的缩写,意为“资源获取即初始化”。最常见的例子是自解锁对象、自关闭文件对象。

void Func()

{   

    AutoLock lock;

    if(...) { 

         // some error

         return

     }

}

就是栈上的对象,构造自动上锁,函数返回/退出时析构自动解锁。由此不需要在每个if else各种分支都需要解锁了。

5、

当单个返回值可能既包含正常返回值,也可能包含函数执行失败状态时,有时很难区分。

方法一是用std::pair,但不够好,比如。

std::pair<bool, std::string> TranslateToEnglish(const std::string& chnText);

auto result = TranslateToEnglish("翻译服务错误");

if(result.first) // 啥是可读性?

    // using result.second;

}

这 first、second 到底是啥啥啥?

能否有一个东西既能表示值,又能表示状态?C++ 17 于是送上了 std::optional<T>。很好用,具体自己去搜索查一下。

6、一个std::function既可以存放普通函数指针,也可以存放结构体或类的方法(指针),也可以放functor,也可以存放lambda。这样就不用做函数指针强制转换了。

02802182b8ee444893a11a8ab3ddfcf6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值