Windows 回退驱动或给已经删除的设备添加驱动
如果想要恢复到曾经安装过的驱动。可以按照下面步骤操作:
首先在设备管理器中选择添加过时硬件。

看到首页之后点下一页。然后选中手动安装,再点一次下一页。

如果想要恢复到曾经安装过的驱动。可以按照下面步骤操作:
首先在设备管理器中选择添加过时硬件。

看到首页之后点下一页。然后选中手动安装,再点一次下一页。

原因是很早之前按照知乎的说法启用了这个设置,本想禁用系统更新时自动安装旧版本的核显驱动,但也使得我的电脑核显驱动坏掉且不能自行安装。

恢复核显驱动首先应该关闭这项,然后去下载对应驱动安装,或者回退到旧的驱动。
这项配置启用时,我的 WSL 也无法正常进入!
设置 apt 代理。编辑 /etc/apt/apt.conf,格式如下(ip 会变):
// 很奇怪,注释竟然是//开头,而不是#
Acquire::http::Proxy "http://192.168.1.56:12366/";
Acquire::https::Proxy "http://192.168.1.56:12366/";
sudo 没有
$http_proxy代理的原因是默认不传递环境变量,使用-E选项传递环境变量就可以不设置上面的代理。
清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/help/debian/
先用自己电脑给 apt 开代理,然后改镜像,安装一些 https 源需要的东西,然后 apt update。之后安装 build-essential mlocate 等等。
#include <iostream>
void print(std::ostream &os, const char *s) {
while (*s) {
char ch = *s++;
// Treat "{}" as a normal substring when no arguments are left
// if (ch == '{' && *s == '}') {
// }
if ((ch == '{' && *s == '{') || (ch == '}' && *s == '}')) {
os << *s++;
} else {
os << ch;
}
}
}
template <class A, class... Ts>
void print(std::ostream &os, const char *s, A &&a, Ts &&...args) {
while (*s) {
char ch = *s++;
if (ch == '{' && *s == '}') {
os << a;
break;
} else if ((ch == '{' && *s == '{') || (ch == '}' && *s == '}')) {
os << *s++;
} else {
os << ch;
}
}
if (*s) print(os, s + 1, std::forward<Ts>(args)...);
}
int main(int argc, char **argv) {
std::cout << std::unitbuf;
print(std::cout, "numbers : {} {} {}\\n", 10, 5, -7);
}
上面的写法依赖了 std::ostream,而且不支持格式指定符。如果能够构造一个模板类 PrintArg 包装 1 个任意类型参数和 1 个输出说明字符串,然后重载 std::ostream 的 << 操作符,那么可以不用动 print 函数的逻辑。
虽然展开字体在预览中描述的是 Extended,但是实际使用时需要写成 Expanded。
先在参数的位置创建一个新的对象,然后和 *this 交换。
struct MyClass {
MyClass& operator=(MyClass other) {
swap(*this, other);
return *this;
}
friend void swap(MyClass &a, MyClass &b) noexcept; {
using std::swap;
swap(a.member1, b.member1);
swap(a.member2, b.member2);
}
int member1;
int member2;
};
这种实现既能够匹配 const MyClass & 的情况,又能匹配 MyClass && 的情况,而且代码行数更短。
swap 函数
使用这种写法必须提供我们自己的 swap 函数,因为 std::swap 对一般类型的实现是使用了构造的,如果不提供我们自己的 swap 函数而去直接调用 std::swap,就会无限递归!std::swap 的相关代码如下:
void
#endif
swap(_Tp& __a, _Tp& __b)
_GLIBCXX_NOEXCEPT_IF(__and_<is_nothrow_move_constructible<_Tp>,
is_nothrow_move_assignable<_Tp>>::value)
{
#if __cplusplus < 201103L
// concept requirements
__glibcxx_function_requires(_SGIAssignableConcept<_Tp>)
#endif
_Tp __tmp = _GLIBCXX_MOVE(__a);
__a = _GLIBCXX_MOVE(__b);
__b = _GLIBCXX_MOVE(__tmp);
}
这个写的时间比较早了,当时有的问题现在可能已经被弥补了。
bcdedit 和 hypervisor 相关,直接关掉 hypervisor 还不能够完全关闭。一些软件仍然不能够运行。
运行 bcdedit /set hypervisorlaunchtype off(需要管理员权限)后再重启可以关掉这个功能。直接使用 bcdedit 开始查看当前的配置状况。