c++一些已有好用功能
struct BitFields {
int b : 4 {1}, d : 4 {2}, p : 4 {3}, q : 4 {4};
//C++20:`位域`的默认成员初始化器
};
const auto [b, d, p, q] = BitFields{};
//结构化解绑定.
上面是位域
#include <iostream>
#include <string_view>
#include <source_location>
void log(string_view message,
const source_location& location = source_location::current())
{
cout << "info:"
<< location.file_name() << ':'
<< location.line() << ' '
<< message << '\n';
}
int main()
{
log("你好");
}
C++源码位置
用法.
declval
转换T
为引用.
非类型模板实参
template<class T>
struct X {
X(T) {}
auto operator<=>(const X&) const = default;
};//X作为模板参数.
template<X x> struct Y { };
Y<0> y; // OK , Y<X<int>(0)>
结构化绑定:
for (auto&& [a,b] : mymap) {
// 使用a,b
}
常量初化:
struct S {
static const int c;//可放只读节
};
const int d = 10 * S::c;//非常量表达式`:S::c`此前无初始化器,此初始化发生晚于常量初始化
const int S::c = 5; //常量初始化,保证首先发生
数组<整,S::c>t;//可放编译时地方.
consteval
立即函数(编译时运行
的函数),每次调用该函数
必须产生编译时常量
.
consteval int sqr(int n) {
return n*n;
}
constexpr int r = sqr(100); // OK
int x = 100;
int r2 = sqr(x); // 错误,调用不产生常量
consteval int sqrsqr(int n) {
return sqr(sqr(n)); //在此点非常量表达式,但是`OK`
}
constexpr int dblsqr(int n) {
return 2*sqr(n); // 错误:外围函数非`consteval`且`sqr(n)`不是常量
}
constexpr
变量是常
类型,只读,在程序开始时初始化constinit
变量,是静
类型,不能在运行时创建,变量不要求是常
类型.
指派初化器
struct A { int x; int y; int z; };
A a{.y = 2, .x = 1}; //错误:指派符的顺序不匹配声明顺序
A b{.x = 1, .z = 2}; // `OK:b.y`初始化为0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现