现代c++语言核心特性解析

1新基础类型

1.1 longlong

long long 占64位 

通常表示方法为 

long long x = 65536LL;或者 long long x = 65536; ==>0x10000

这里LL为字面量后缀 若是没有LL  65536这个数会被当做32位数 若是<<16位的话 第二个x的值会得到0(因为超出了) 第一个x 得到0x100000000 

 long long 也可以用做枚举底层整形类型 

enum class LargeValue : long long {
    Value1 = 10000000000000000ULL,
    Value2,
    Value3
};
 

枚举 拓展 

template <typename T>
void process(T t) {
    std::cout << "General processing: " << t << std::endl;
}
// 针对 LogLevel 的模板特化
template <>
void process<LogLevel>(LogLevel level) {
    switch (level) {
    case LogLevel::Info:
        std::cout << "Information: ";
        break;
    case LogLevel::Warning:
        std::cout << "Warning: ";
        break;
    case LogLevel::Error:
        std::cout << "Error: ";
        break;
    }
    std::cout << "Log message processed" << std::endl;
}
int main() {
    // 调用通用模板函数
   process(42);  // 处理整数
   process("Hello");  // 处理字符串
   // 调用针对 LogLevel 的特化版本
   process(LogLevel::Info);    // 输出: Information: Log message processed
   process(LogLevel::Warning); // 输出: Warning: Log message processed
   process(LogLevel::Error);   // 输出: Error: Log message processed
}

更加详细的可以看[C++11] 枚举新特性完整解析_c++11 enum 明确-CSDN博客

1.2 char16_t 与char32_t

 ..........

2内联和嵌套命名空间

2.1内嵌命名空间

//相比与 直接在parent中定义函数 

namespace parent
{
    inline namespace child1{
        void mym1()
        {
            cout << "mymniubi" << endl;
        }
    }
    namespace child2
    {
        void hsf1()
        {
            cout << "HSF" << endl;
        }
    }
}

int main()
{
    parent::mym1();//可以不用child1 
    parent::hsf::hsf1();
}
namespace Parent 
{
  namespace V1 {
       void foo() { std::cout << "foo v1.0" << std::endl; }
               }
inline namespace V2 {
            void foo() { std::cout << "foo v2.0" << std::endl; }
                }
}
int main()
{
        Parent::foo();
}

一开始是1.0的版本 当要更新里边的东西的时候 可以内联 v2 当要用到V1的时候用parent::V1::foo  这样就可以不用改V1里边的东西

如果想加入V3版本的接口,则只需要创建V3的内联命名空间,并且将命名空间V2的inline关键字删除。请注意,示例代码中只能有一个内联命名空间,否则编译时会造成二义性问题,编译器不知道使用哪个内联命名空间的foo函数。

2.2 嵌套命名空间的简化语法
 

//C++17
namespace A::B::C {
    int foo() { return 5; }
}
//等价于
namespace A {
    namespace B {
        namespace C {
            int foo() { return 5; }
            }
       }
   }


//C++20
namespace A::B::inline C {
     int foo() { return 5; }
}
// 或者
namespace A::inline B::C {
    int foo() { return 5; }
}
//分别等价于
namespace A::B {
    inline namespace C {
        int foo() { return 5; }
        }
    }


namespace A {
    inline namespace B {
        namespace C {
            int foo() { return 5; }
                }
            }
        }

相比于 C++98 带来的面向对象的革命性,C++11 带来的 XIII  却并非“翻天覆地”式的改变。很多时候,程序员保持着“C++98 式”的观点来看待 C++11 代码也同样是合理的。因为在编程思想上,C++11 依然遵从了一贯的面向对象的思想,并深 入加强了泛型编程的支持。从我们的观察来看,C++11 更多的是对步入“成熟稳重”的中年 时期的 C++ 的一种改造。比如,像 auto 类型推导这样的新特性,展现出的是语言的亲和力 ; 而右值引用、移动语义的特性,则着重于改变一些使用 C++ 程序库时容易发生的性能不佳的 状况。当然,C++11 中也有局部的创新,比如 lambda 函数的引入,以及原子类型的设计等, 都体现了语言与时俱进的活力。语言的诸多方面都在 C++11 中再次被锤炼,从而变得更加合 理、更加条理清晰、更加易用。C++11 对 C++ 语言改进的每一点,都呈现出了经过长时间技 术沉淀的编程语言的特色与风采。所以从这个角度上看,学习 C++11 与 C++98 在思想上是 一脉相承的,程序员可以用较小的代价对 C++ 的知识进行更新换代。而在现实中,只要修改 少量已有代码(甚至不修改) ,就可以使用 C++11 编译器对旧有代码进行升级编译而获得新 标准带来的好处,这也非常具有实用性。因此,从很多方面来看,C++ 程序员都应该乐于升 级换代已有的知识,而学习及使用 C++11 也正是大势所趋。
现代 C 语言是指 C11/C17 标准之后的 C 语言版本。其核心特性包括了多线程、原子操作、泛型和 stdatomic 库等。下面具体解析一下现代 C 语言核心特性。 1. 多线程 多线程是现代 C 语言中最重要的特性之一。多线程使得程序可以同时执行多个任务,从而提高程序性能。现代 C 语言通过 POSIX 线程库和 Windows 线程库实现多线程编程。POSIX 线程库是 POSIX 标准中定义的线程库,可以跨平台使用。Windows 线程库是 Windows 操作系统中的线程库,可以在 Windows 系统上使用。 2. 原子操作 原子操作是现代 C 语言中的另一个重要特性。原子操作可以保证多线程环境下的数据、变量等在并发访问时不会出错。现代 C 语言提供了一组原子操作的 API。这些 API 包括了原子加、原子减、原子赋值、原子与、原子或等。这些原子操作可以在不同的平台上使用。 3. 泛型 现代 C 语言引入了泛型的概念。泛型允许程序员在不同的数据类型上编写通用的代码。这使得现代 C 语言可以实现更加通用的数据结构和算法。现代 C 语言中的泛型使用了类型参数化的技术,即把某些代码中的类型抽象出来作为参数。 4. stdatomic 库 stdatomic 库是现代 C 语言中的一个库,它提供了原子类型和原子操作等特性。stdatomic 库使用了 C11 标准中的 _Atomic 关键字来定义原子类型。stdatomic 库中包含了原子加、原子减、原子赋值等操作函数,这些操作可以在多线程环境下执行,保证数据的正确性。 总之,现代 C 语言核心特性包括了多线程、原子操作、泛型和 stdatomic 库等。这些特性使得现代 C 语言可以更好地支持并发编程、泛型编程等。开发者可以充分利用这些特性来提高程序性能和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值