公众号
欢迎投稿,推荐或自荐文章/软件/资源等
可以贴在下一期草稿里 草稿链接
编译器信息最新动态推荐关注hellogcc公众号 本周更新 2022-11-23 第177期
看个乐
了解一波
class Derived : Base
{
void DoSomething()
{
auto p1 = std::make_unique<BaseAcceptor>(static_cast<Base*>(this));
auto p2 = std::make_shared<BaseAcceptor>(static_cast<Base*>(this));
std::vector<BaseAcceptor> v;
v.emplace_back(static_cast<Base*>(this));
}
};
忘记打public 继承,多了一堆static_cast
Inside boost::unordered_flat_map
目前boost::unordered_flat_map是最快的hashmap了,但是他们做了啥技巧能这么快呢?一些缓存友好的设计,以及simd
qt一些使用QNetworkAccessManager的细节
记得删除reply
QNetworkReply *reply = ...
connect(reply, &QNetworkReply::finished, this, [reply]()) {
reply->deleteLater();
//...
});
使用https,不多说
QNetworkAccessManager不要一个请求创建一个
重定向
qt5是关的,需要设置一下,qt6是默认设置好了的
auto nam = new QNetworkAccessManager(this);
nam->setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy);
HSTS
这个我不懂
auto nam = new QNetworkAccessManager(this);
nam->setStrictTransportSecurityEnabled(true);
nam->enableStrictTransportSecurityStore(true, QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1String("/hsts/"));
SSL错误处理
QNetworkReply *reply = ...
connect(reply, &QNetworkReply::sslErrors, this, [reply](const QList<QSslError> &errors) {
KSslErrorUiData errorData(reply, errors);
if (KIO::SslUi::askIgnoreSslErrors(errorData)) {
reply->ignoreSslErrors();
}
});
Disk cache
auto nam = new QNetworkAccessManager(this);
auto diskCache = new QNetworkDiskCache(nam);
diskCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1String("/http/"));
nam->setCache(diskCache);
省流:别用
省流:犄角旮旯语法教学,别看
c++20 SSO优化的短字符串string是能查到长度的,gcc/msvc是15个,clang是23个,当然如果string_view任何长度都可以查长度
Exploring the Limits of Class Template Argument Deduction
CTAD能玩出什么花来,我的评价是尽量别用CTAD
书评。这本书讲的不错,列一段代码
Logger& getLogger() {
// Even if two threads call getLogger() simultaneously,
// local will be constructed only once.
static Logger local("log.txt");
return local;
}
struct FileManager {
FileManager()
{
getLogger() << "Starting up file manager…";
// …
}
~FileManager()
{
getLogger() << "Shutting down file manager…";
// …
}
};
FileManager& getFileManager() {
// Global fileManager, initialized on the first call
// to getFileManager().
static FileManager fileManager;
return fileManager;
}
这两个是很常规的代码,但组合到一起,就有了问题,析构!如果Logger先于FileManager析构,FileManager的析构用到了已经析构的Logger,崩溃
这种通常是在程序退出的时候莫名其妙多个core。如何合理的解决这个问题?加锁?
C++23: How lambdas are going to change?
lambda进化了,举例
auto counter = [j=0]() mutable -> decltype(j) {
return j++;
};
auto lm = [][[nodiscard]]()->int { return 42; };
比较c++ 和rust的move,c++的move确实有点高深,不清晰
iOS 16 / macOS 13 支持的新特性,走读一波c api。感兴趣的可以看看
一个无锁hashtable
代码
https://github.com/tempesta-tech/blog/tree/master/htrie
https://github.com/tempesta-tech/tempesta/blob/master/db
卖APU的
容器的各种性能指标。不用看
没啥意思,可以不看
Undefined Behavior in the STL - Sandor Dargo - CppCon 2022
各种边界越界UB/空的容器的front() pop_front() back() pop_back(),string_view ,各种迭代器使用,迭代器range有问题
感觉演讲者都绷不住了