目录
有关枚举
enum color { red, green=5, blue };
可以有枚举名,在这里color就是枚举类型的名字。
匿名枚举
如果没有枚举类型的名字就是匿名枚举。
#include <iostream>
enum { RED, GREEN, BLUE }; // 匿名枚举
int main() {
int color = BLUE; // 使用枚举成员BLUE
std::cout << "The value of BLUE is: " << color << std::endl;
return 0;
}
输出将显示 “The value of BLUE is: 2”,因为 BLUE
在匿名枚举中的值为 2
。
匿名枚举的一个主要用途是定义一组整数常量,使代码更清晰易懂。此外,由于匿名枚举不定义新的类型,使用它们不会增加程序的类型复杂度。
有符号整数与无符号整数
register存储类
while(--count)与while(count--)
前缀还是后缀决定的是判断的值,并不影响进入循环体的值。
mutable存储类
想象一下,有时候你可能想要更改一个类对象的成员变量,即使这个对象是常量对象。mutable
关键字就可以帮助你实现这个目的。它允许你修改 const
对象中的某些成员变量。简单来说,mutable
关键字使得这个成员变量不受 const
关键字的限制。
class Example {
public:
mutable int x;
Example(int val) : x(val) {}
void modify() const {
x = 20; // 允许修改
}
};
int main() {
const Example e(10);
e.modify();
std::cout << e.x << std::endl; // 输出 20
return 0;
}
懒惰计算的例子
#include <iostream>
class LazyValue {
public:
LazyValue(int value) : value(value), is_calculated(false) {}
int get_value() const {
if (!is_calculated) {
// 模拟一个复杂计算
std::cout << "Calculating value..." << std::endl;
calculated_value = value * 2; // 例如将 value 乘以 2
is_calculated = true;
}
return calculated_value;
}
private:
int value;
mutable int calculated_value;
mutable bool is_calculated;
};
int main() {
LazyValue lv(10);
// 第一次调用,触发计算
std::cout << "Value: " << lv.get_value() << std::endl;
// 第二次调用,使用缓存
std::cout << "Value: " << lv.get_value() << std::endl;
return 0;
}
thread_local存储类
#include <iostream>
#include <thread>
#include <vector>
// 线程局部存储的全局变量
thread_local int x = 0;
void printX() {
std::cout << "Thread ID: " << std::this_thread::get_id() << " - x: " << x << std::endl;
x++;
}
int main() {
std::thread t1(printX);
std::thread t2(printX);
std::thread t3(printX);
t1.join();
t2.join();
t3.join();
return 0;
}
lambda函数函数与表达式
[Capture clause] (parameters) mutable exception ->return_type
{
// Method definition;
}
与for each结合的例子
#include <cmath>
#include<bits/stdc++.h>
using namespace std;
int main()
{
// list of number
vector<int> numbers = {137, 171, 429, 467, 909};
// list for prime numbers
vector<int> v1 = {};
// visiting each element of nums and seperating prime numbers
// using lambda expression
for_each(numbers.begin(), numbers.end(),[&v1](int x)mutable{
bool notPrime = false;
for(int i=2; i<=sqrt(x);i++){
if(x%i==0){
notPrime = true;
break;
}
}
if(!notPrime) v1.push_back(x);
});
cout << "List of prime numbers" << endl;
for(int i : v1){
cout << i << " ";
}
}
如果不用引用的在函数体内修改的只是v1的副本不能达到预期效果。
常用函数
以null结尾的字符串
获取当前日期和时间
#include <iostream>
#include <ctime>
int main()
{
time_t now = time(nullptr); // 获取当前时间
char* dt = ctime(&now); // 转换为字符串
std::cout << "本地日期和时间: " << dt << std::endl;
tm* gmtm = gmtime(&now); // 转换为 GMT 时间
dt = asctime(gmtm); // 转换为字符串
std::cout << "UTC 日期和时间: " << dt << std::endl;
return 0;
}