首页 > 编程语言 >【C++11新特性】在定义静态成员变量的同时进行初始化

【C++11新特性】在定义静态成员变量的同时进行初始化

时间:2024-07-12 16:08:38浏览次数:12  
标签:11 初始化 index long CRC C++ test sCrcTable

//test.h
class test
{
public:
    test() = delete;
    ~test() = delete;
private:
    static constexpr long long POLY_64_REV = 0x95AC9329AC4BC9B5L;
    static constexpr int BITS_PER_BYTE = 8;
    static constexpr int CRC_TABLE_LENGTH = 256;
    static long long sCrcTable[CRC_TABLE_LENGTH];
    static bool sIsInitialized;
};

//test.cpp
long long test::sCrcTable[CRC_TABLE_LENGTH] = { 0 };

bool test::sIsInitialized = []() {
    long long part;
    for (int index = 0; index < CRC_TABLE_LENGTH; index++) {
        part = index;
        for (int bit = 0; bit < BITS_PER_BYTE; bit++) {
            long long value = ((int)part & 1) != 0 ? POLY_64_REV : 0;
            part = (part >> 1) ^ value;
        }
        sCrcTable[index] = part;
    }
    return true;
    }();

这段代码是在初始化静态成员变量 sIsInitialized,它是一个 bool 类型的变量。这种写法利用了C++11中的新特性,即在定义静态成员变量的同时进行初始化,这样可以确保 sCrcTable 和 sIsInitialized 在程序开始运行时被正确初始化。

具体来说,代码的作用是初始化一个名为 sCrcTable 的长整型数组,数组的长度为 CRC_TABLE_LENGTH,即256。这个数组存储了预先计算好的循环冗余校验(CRC)的值。在初始化过程中,通过一个循环来计算每个 index 对应的 CRC 值,然后存储在 sCrcTable[index] 中。

关键的部分是 sIsInitialized 的赋值部分 { ... }();,这是一个立即执行的匿名函数(或者称为立即执行的lambda表达式)。这种技术可以确保 sCrcTable 在第一次使用之前被正确初始化,而不需要额外的初始化代码。

标签:11,初始化,index,long,CRC,C++,test,sCrcTable
From: https://www.cnblogs.com/mengyaoli/p/18298604

相关文章

  • 【C++修行之道】string类的使用
    目录一.C语言中的字符串二、标准库中的string类(了解)2.1string类(了解)2.2帮助文档阅读三、string类的常用接口说明3.1 string类对象的常见构造 3.2 string类对象的容量操作3.3 string类对象的访问及遍历操作字符串类的简单实现3.4 string类对象的修改操作......
  • 2024年华为OD机试真题-传递悄悄话-C++-OD统一考试(C卷D卷)
    2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述:给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄......
  • C++ 多态
    1.多态的概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。2.多态的定义及实现2.1 虚函数虚函数:即被virtu......
  • 通过注册表关闭windows11自动更新
    按win+R进入运行界面,并且输入regedit。在注册表中依次展开以下目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings右键新建一个DWORD(32位)值。重命名为FlightSettingsMaxPauseDays将基数改为十进制,现在的填入的数值数据就是你要暂停系统更新的天......
  • How to ues Dev C++
    对于Dev-C++这个"老古董",合理利用设置去提升它的能力,是非常important重要的。1.打开全警告方式:工具[T]->编译选项[C]->代码生成/优化->代码警告->第二个和第三个选Yes代码里,总是会出现奇奇怪怪的错误(scanf、printf占位符和参数列表不匹配,if里把==打成=,运算符优先级.........
  • 一些 C++ 的卡常技巧
    是的,这篇文章的主要内容非常好懂,相信各位同学也十分感兴趣毕竟哪位OIer不想自己的代码跑得飞快呢?那么我们就进入正题吧!First众所周知,一份代码里面必然会有很多循环打表的话当我没说,而循环自然是十分占时间的。所以我们要做的就十分清楚了:加速循环!1.把int改成registerin......
  • <c++>斗破苍穹游戏(转载·博客园)喜欢的一键三连~
    #include<stdio.h>#include<ctime>#include<time.h>//suiji#include<windows.h>//SLEEP函数structPlayer//玩家结构体,并初始化player{charname[21];intattack;intdefense;inthealth;longintmax_health;intlevel;intexp;intrange_exp;......
  • stm32 EC11编码器
    #include"encoder.h"//A线作为时钟线,B线作为信号线//*******************************************************************///功能:初始化EC11旋转编码器相关参数//返回:无//详解:对EC11旋转编码器的连接IO口做IO口模式设置。以及将相关的变量进行初始化//************......
  • C++编程基础
     一:C++程序语言的基本组成。其中包括:1.一些基础数据类型:布尔值(Boolean)、字符(character)、整数(integer),   浮点数(foating  point)。2.算术运算符、关联运算符以及逻辑运算符,用以操作上述的基础数据型别。这些运算符不仅包括一般常见的加法运算符、等......
  • c/c++设计模式---访问者模式
    访问者(Visitor)模式:访问器模式,行为型模式。  //(1)一个具体范例的逐渐演化  //阿司匹林肠溶片:改善血液流通,预防血栓形成,血栓形成就产生阻塞,人就会直接面临危险;  //氟伐他汀钠缓释片:降血脂。因为血脂高意味着血流慢,营养无法运输到身体各部位,还很可能引发心脑血管疾病;......