C产品在市场上有哪些独特优势?

2026-04-28 04:531阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1012个文字,预计阅读时间需要5分钟。

C产品在市场上有哪些独特优势?

目录+一:背景+二:聊聊+namespace+1. 简单的间隔+2. 使用 using 导入+3. 使用 using 定义别名+4. 使用 using namespace 导入+一:背景+二:聊聊+namespace+1. 简单的间隔+2. 使用 using 导入+3. 使用 using 定义别名+4. 使用 using namespace 导入

目录
  • 一:背景
  • 二:聊一聊 namespace
    • 1. 简单的隔离
    • 2. 使用 using 导入
    • 3. 使用 using 定义别名
    • 4. 使用 using namespace 导入

一:背景

相信大家在分析 dump 时,经常会看到WKSSRV这样的字眼,如下代码所示:

00007ffa`778a07b8 coreclr!WKS::gc_heap::segment_standby_list = 0x00000000`00000000 00007ffa`778a3870 coreclr!WKS::qpf = 0x989680 00007ffa`7789da30 coreclr!SVR::heap_select::numa_node_to_heap_map = unsigned short [1028] 00007ffa`7789f2d0 coreclr!SVR::gc_heap::should_expand_in_full_gc = 0n0

其实这就是命名空间,即 coreclr 在编译源码的时候,为WKSSVR各编译了一份,不知道这么做的初衷是什么,这里就不管了,接下来看下 coreclr 中大概长啥样子。

namespace WKS { #include "gcimpl.h" #include "gc.cpp" } namespace SVR { #include "gcimpl.h" #include "gc.cpp" }

二:聊一聊 namespace

其实和 C# 的 namespace 本质差不多,都是起到隔离的作用,而且和 using 的配合使用和 C# 也是如出一辙,太有意思了。

C产品在市场上有哪些独特优势?

1. 简单的隔离

在 C++ 中默认只有一个 namespace,所以相同的变量会出现冲突,解决办法就是用 namespace 隔离,参考如下代码:

namespace WKS { int a = 10; int b = 11; } namespace SRV { int a = 100; int b = 101; } int main() { printf("WKS::a= %d \n", WKS::a); printf("SRV::a= %d \n", SRV::a); }

当然还可以嵌套使用,比如改成这样。

namespace WKS { namespace V1 { int a = 10; int b = 11; } } int main() { printf("WKS::a= %d \n", WKS::V1::a); }

接下来看下汇编代码:

哈哈,看到上面的WKS::V1::a感觉是不是挺舒服的,也特能理解目前的coreclr!WKS::xxx了, 不过这里有一个麻烦的地方,就是每次用a的时候都要输入很长的前缀,那有没有简化的方法呢? 当然有啦。

2. 使用 using 导入

接下来我们用 using 直接在 main 函数中定义字段,后续就不需要再写长长的前缀引用了,参考代码如下:

namespace WKS { namespace V1 { int a = 10; int b = 11; } } int main() { using WKS::V1::a; printf("WKS::V1::a1= %d \n", a); }

3. 使用 using 定义别名

定义别名这功能特别好,个人感觉已经完全替代以前的typedef功能,比如下面的代码是完全一样的。

int main() { typedef const char* PCHAR; using PCHAR2 = const char*; PCHAR ptr1 = "hello world1"; PCHAR2 ptr2 = "hello world2"; }

如果还不信的话,可以看下它们各自生成的汇编代码。

PCHAR ptr1 = "hello world1"; 00007FF79856183B lea rax,[string "hello world1" (07FF798569C10h)] 00007FF798561842 mov qword ptr [ptr1],rax PCHAR2 ptr2 = "hello world2"; 00007FF798561846 lea rax,[string "hello world2" (07FF798569CE8h)] 00007FF79856184D mov qword ptr [ptr2],rax

4. 使用 using namespace 导入

这个是最普遍的,我们对系统库的调用,无一不是用 using namespace 方式的,比如下面的代码。

using namespace std; int main() { string str = "hello world"; }

接下来我们把 V1 导入到 main 方法中,这样就可以自由自在的使用WKS::V1中的内容了,参考如下代码:

namespace WKS { namespace V1 { int a = 10; int b = 11; } } int main() { using namespace WKS::V1; printf("a=%d, b=%d", a, b); }

好了,这就是对 namespace 的一点理解,本篇就说这么多吧,希望对你有帮助。

以上就是C# CLR学习 C++使用namespace实例详解的详细内容,更多关于C# CLR C++使用namespace的资料请关注自由互联其它相关文章!

本文共计1012个文字,预计阅读时间需要5分钟。

C产品在市场上有哪些独特优势?

目录+一:背景+二:聊聊+namespace+1. 简单的间隔+2. 使用 using 导入+3. 使用 using 定义别名+4. 使用 using namespace 导入+一:背景+二:聊聊+namespace+1. 简单的间隔+2. 使用 using 导入+3. 使用 using 定义别名+4. 使用 using namespace 导入

目录
  • 一:背景
  • 二:聊一聊 namespace
    • 1. 简单的隔离
    • 2. 使用 using 导入
    • 3. 使用 using 定义别名
    • 4. 使用 using namespace 导入

一:背景

相信大家在分析 dump 时,经常会看到WKSSRV这样的字眼,如下代码所示:

00007ffa`778a07b8 coreclr!WKS::gc_heap::segment_standby_list = 0x00000000`00000000 00007ffa`778a3870 coreclr!WKS::qpf = 0x989680 00007ffa`7789da30 coreclr!SVR::heap_select::numa_node_to_heap_map = unsigned short [1028] 00007ffa`7789f2d0 coreclr!SVR::gc_heap::should_expand_in_full_gc = 0n0

其实这就是命名空间,即 coreclr 在编译源码的时候,为WKSSVR各编译了一份,不知道这么做的初衷是什么,这里就不管了,接下来看下 coreclr 中大概长啥样子。

namespace WKS { #include "gcimpl.h" #include "gc.cpp" } namespace SVR { #include "gcimpl.h" #include "gc.cpp" }

二:聊一聊 namespace

其实和 C# 的 namespace 本质差不多,都是起到隔离的作用,而且和 using 的配合使用和 C# 也是如出一辙,太有意思了。

C产品在市场上有哪些独特优势?

1. 简单的隔离

在 C++ 中默认只有一个 namespace,所以相同的变量会出现冲突,解决办法就是用 namespace 隔离,参考如下代码:

namespace WKS { int a = 10; int b = 11; } namespace SRV { int a = 100; int b = 101; } int main() { printf("WKS::a= %d \n", WKS::a); printf("SRV::a= %d \n", SRV::a); }

当然还可以嵌套使用,比如改成这样。

namespace WKS { namespace V1 { int a = 10; int b = 11; } } int main() { printf("WKS::a= %d \n", WKS::V1::a); }

接下来看下汇编代码:

哈哈,看到上面的WKS::V1::a感觉是不是挺舒服的,也特能理解目前的coreclr!WKS::xxx了, 不过这里有一个麻烦的地方,就是每次用a的时候都要输入很长的前缀,那有没有简化的方法呢? 当然有啦。

2. 使用 using 导入

接下来我们用 using 直接在 main 函数中定义字段,后续就不需要再写长长的前缀引用了,参考代码如下:

namespace WKS { namespace V1 { int a = 10; int b = 11; } } int main() { using WKS::V1::a; printf("WKS::V1::a1= %d \n", a); }

3. 使用 using 定义别名

定义别名这功能特别好,个人感觉已经完全替代以前的typedef功能,比如下面的代码是完全一样的。

int main() { typedef const char* PCHAR; using PCHAR2 = const char*; PCHAR ptr1 = "hello world1"; PCHAR2 ptr2 = "hello world2"; }

如果还不信的话,可以看下它们各自生成的汇编代码。

PCHAR ptr1 = "hello world1"; 00007FF79856183B lea rax,[string "hello world1" (07FF798569C10h)] 00007FF798561842 mov qword ptr [ptr1],rax PCHAR2 ptr2 = "hello world2"; 00007FF798561846 lea rax,[string "hello world2" (07FF798569CE8h)] 00007FF79856184D mov qword ptr [ptr2],rax

4. 使用 using namespace 导入

这个是最普遍的,我们对系统库的调用,无一不是用 using namespace 方式的,比如下面的代码。

using namespace std; int main() { string str = "hello world"; }

接下来我们把 V1 导入到 main 方法中,这样就可以自由自在的使用WKS::V1中的内容了,参考如下代码:

namespace WKS { namespace V1 { int a = 10; int b = 11; } } int main() { using namespace WKS::V1; printf("a=%d, b=%d", a, b); }

好了,这就是对 namespace 的一点理解,本篇就说这么多吧,希望对你有帮助。

以上就是C# CLR学习 C++使用namespace实例详解的详细内容,更多关于C# CLR C++使用namespace的资料请关注自由互联其它相关文章!