From 18f30a318f72d1d77be3131c9b6fef11515ce14e Mon Sep 17 00:00:00 2001 From: mq-b <3326284481@qq.com> Date: Tue, 22 Oct 2024 11:15:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E7=AC=AC=2014=20=E9=A2=98?= =?UTF-8?q?=E7=9A=84=E8=A7=A3=E9=87=8A=E4=B8=8E=E6=8E=AA=E8=BE=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 110 +++++++++++++++++++++++++++++------------------------- 1 file changed, 59 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index de6b3e8d..c223a399 100644 --- a/README.md +++ b/README.md @@ -21,75 +21,77 @@ - [前言](#前言) - [`01` 实现管道运算符](#01-实现管道运算符) - + [运行结果](#运行结果) - + [群友提交](#群友提交-0) - + [标准答案](#标准答案-0) - + [解析](#解析-0) + - [运行结果](#运行结果) + - [群友提交](#群友提交) + - [标准答案](#标准答案) + - [解析](#解析) - [`02` 实现自定义字面量 `_f`](#02-实现自定义字面量-_f) - + [运行结果](#运行结果-1) - + [群友提交](#群友提交-1) - + [标准答案](#标准答案-1) - + [解析](#解析-1) + - [运行结果](#运行结果-1) + - [群友提交](#群友提交-1) + - [标准答案](#标准答案-1) + - [解析](#解析-1) - [`03` 实现 `print` 以及特化 `std::formatter`](#03-实现-print-以及特化-stdformatter) - + [运行结果](#运行结果-2) - + [群友提交](#群友提交-2) - + [标准答案](#标准答案-2) - + [解析](#解析-2) + - [运行结果](#运行结果-2) + - [群友提交](#群友提交-2) + - [标准答案](#标准答案-2) + - [解析](#解析-2) - [`04` 给定类模板修改,让其对每一个不同类型实例化有不同 ID](#04-给定类模板修改让其对每一个不同类型实例化有不同-id) - + [运行结果](#运行结果-3) - + [群友提交](#群友提交-3) - + [标准答案](#标准答案-3) + - [运行结果](#运行结果-3) + - [群友提交](#群友提交-3) + - [标准答案](#标准答案-3) - [`05` 实现 `scope_guard` 类型](#05-实现-scope_guard-类型) - + [运行结果](#运行结果-4) - + [群友提交](#群友提交-4) - + [标准答案](#标准答案-4) + - [运行结果](#运行结果-4) + - [群友提交](#群友提交-4) + - [标准答案](#标准答案-4) - [`06` 解释 `std::atomic` 初始化](#06-解释-stdatomic-初始化) - + [群友提交](#群友提交-5) - + [标准答案](#标准答案-5) + - [群友提交](#群友提交-5) + - [标准答案](#标准答案-5) - [`07` `throw new MyException`](#07-throw-new-myexception) - + [运行结果](#运行结果-5) - + [群友提交](#群友提交-6) - + [标准答案](#标准答案-6) + - [运行结果](#运行结果-5) + - [群友提交](#群友提交-6) + - [标准答案](#标准答案-6) - [`08` 定义`array`推导指引](#08-定义array推导指引) - + [运行结果](#运行结果-6) - + [群友提交](#群友提交-7) - + [标准答案](#标准答案-7) + - [运行结果](#运行结果-6) + - [群友提交](#群友提交-7) + - [标准答案](#标准答案-7) - [`09` 名字查找的问题](#09-名字查找的问题) - + [运行结果](#运行结果-7) - + [群友提交](#群友提交-8) - + [标准答案](#标准答案-8) + - [运行结果](#运行结果-7) + - [群友提交](#群友提交-8) + - [标准答案](#标准答案-8) - [`10` 遍历任意类数据成员](#10-遍历任意类数据成员) - + [运行结果](#运行结果-8) - + [群友提交](#群友提交-9) - + [标准答案](#标准答案-9) + - [运行结果](#运行结果-8) + - [群友提交](#群友提交-9) + - [标准答案](#标准答案-9) - [`C++17` 写法](#c17-写法) - [`C++20` 写法](#c20-写法) - + [补充说明](#补充说明-0) + - [无法处理引用类型以及不可移动类型](#无法处理引用类型以及不可移动类型) + - [补充说明](#补充说明) - [`11` `emplace_back()` 的问题](#11-emplace_back-的问题) - + [群友提交](#群友提交-10) - + [标准答案](#标准答案-10) + - [群友提交](#群友提交-10) + - [标准答案](#标准答案-10) - [`12` 实现`make_vector()`](#12-实现make_vector) - + [运行结果](#运行结果-9) - + [群友提交](#群友提交-11) - + [标准答案](#标准答案-11) + - [运行结果](#运行结果-9) + - [群友提交](#群友提交-11) + - [标准答案](#标准答案-11) - [运行结果](#运行结果-10) - [`13` 关于 `return std::move`](#13-关于-return-stdmove) - + [群友提交](#群友提交-12) - + [标准答案](#标准答案-12) + - [群友提交](#群友提交-12) + - [标准答案](#标准答案-12) - [`14` 以特殊方法修改命名空间中声明的对象](#14-以特殊方法修改命名空间中声明的对象) - + [运行结果](#运行结果-11) - + [群友提交](#群友提交-13) - + [标准答案](#标准答案-13) + - [运行结果](#运行结果-11) + - [群友提交](#群友提交-13) + - [标准答案](#标准答案-13) - [利用符号来解决](#利用符号来解决) - [直接修改内存](#直接修改内存) - [利用名字查找规则](#利用名字查找规则) - [`15` 表达式模板](#15-表达式模板) - + [群友提交](#群友提交-14) - + [标准答案](#标准答案-14) - + [解析](#解析-3) + - [运行结果](#运行结果-12) + - [群友提交](#群友提交-14) + - [标准答案](#标准答案-14) + - [解析](#解析-3) - [`16` 制造传递函数模板的宏](#16-制造传递函数模板的宏) - + [群友提交](#群友提交-15) - + [标准答案](#标准答案-15) + - [群友提交](#群友提交-15) + - [标准答案](#标准答案-15) @@ -2088,10 +2090,14 @@ int main(){
-当然了,我们也可以利用预处理器,来进行兼容。**原理**: +当然了,我们也可以利用预处理指令 [`#pragma comment`](https://learn.microsoft.com/zh-cn/cpp/preprocessor/comment-c-cpp?view=msvc-170),来特殊处理 MSVC。**原理**: -- Itanium ABI 上变量 ss::a 的重整名为 _ZN2ss1aE。 -- 在 MSVC 上需要用 #pragma 告诉链接器使用 MSVC ABI 的重整名 ?a@ss@@3HA。 +- [Itanium ABI](https://itanium-cxx-abi.github.io/cxx-abi/abi.html) 上变量 `ss::a` 的重整名为 `_ZN2ss1aE`。 +- 在 MSVC 可以使用 `#pragma comment` 添加 `/alternatename` 链接选项,指定在找不到符号 `?_ZN2ss1aE@@3HA` 时,使用符号 `?a@ss@@3HA` 作为替代。 + +>`?a@ss@@3HA` 就是 `ss::a` 的符号,而 `?_ZN2ss1aE@@3HA` 就是 `extern int _ZN2ss1aE` 的符号。 +> +>因为 `_ZN2ss1aE` 没有定义,所以必然没有符号 `?_ZN2ss1aE@@3HA` ,就使用 `?a@ss@@3HA` 作为替代,那么此时操作 `_ZN2ss1aE` 如同操作 `ss::a`。 ```cpp #include @@ -2110,6 +2116,8 @@ int main() { } ``` +> + > 来源:[聚聚](https://github.com/Mq-b/Loser-HomeWork/pull/194)。 #### 直接修改内存