当前位置: 首页 > wzjs >正文

屏蔽ip地址访问网站如何快速提升自己

屏蔽ip地址访问网站,如何快速提升自己,wordpress登录主题,子洲网站建设制作一、入门 1、C中基础类型的初始化方式有哪些?请举例说明 ​默认初始化​ 对于全局变量和静态变量,基础类型(如int、float、double等)会被初始化为 0;而对于局部变量,其值是未定义的,包含随机…

一、入门

1、C++中基础类型的初始化方式有哪些?请举例说明

默认初始化

对于全局变量和静态变量,基础类型(如intfloatdouble等)会被初始化为 0;而对于局部变量,其值是未定义的,包含随机的垃圾值。

全局变量初始化为0,局部变量值未定义

#include <iostream>int global_x; // 全局变量,默认初始化为 0void testDefaultInitialization() {int local_x; // 局部变量,值未定义std::cout << "Global x: " << global_x << std::endl;std::cout << "Local x: " << local_x << std::endl; // 输出值不确定
}

​拷贝初始化—— 有赋值符

int y = 5;(通过等号赋值初始化,支持隐式类型转换)

int main() {int y = 5; // 常规拷贝初始化double d = 3.14;int z = d; // 隐式类型转换,d 从 double 转为 int,小数部分被截断std::cout << "y: " << y << ", z: " << z << std::endl;return 0;
}

隐式转换陷阱:若目标类型存在单参数构造函数,可能触发隐式类型转换(如MyClass obj = 10会调用MyClass(int)构造函数)

直接初始化 —— ()构造函数

  • int z(6); 或 
  • std::vector<int> v(10, 5); 生成10个5,调用 vector 的构造函数 vector(size_type count, const T& value) 实现的
  • 当编译器遇到 vector<int> v(10) 时,会优先调用 vector(size_type count),生成 ​10 个 0
  • vector<int> v{10};  // 实际调用 initializer_list 构造函数,生成 1 个元素 10
初始化方式预期行为实际可能行为(未正确处理时)
vector<int> v(10, 5);生成 ​10 个 int 类型的 5正常调用数值型构造函数
vector<int> v(10, 5.0)预期同上5.0 转 int若匹配到模板构造函数,导致 ​编译错误​ 或 ​非法内存访问

 显式调用构造函数,避免隐式转换

#include <iostream>class MyInt {
public:MyInt(int value) : data(value) {}int getData() const { return data; }
private:int data;
};int main() {MyInt obj(6); // 直接初始化,显式调用构造函数std::cout << "Object data: " << obj.getData() << std::endl;return 0;
}

列表初始化(C++11)​

int a{7}; 或 int b = {8};(统一语法,禁止窄化转换)

#include <iostream>int main() {int a{7}; // 列表初始化int b = {8}; // 另一种列表初始化形式// int c{3.14}; // 错误,禁止窄化转换std::cout << "a: " << a << ", b: " << b << std::endl;return 0;
}
  • 统一初始化语法,适用于基本类型、数组、容器(如std::map<int, std::string> m{{1, "one"}, {2, "two"}}
  • 优先匹配std::initializer_list构造函数(如vector<int>{3,5}生成[3,5]而非[5,5,5]

 

2、类对象的默认构造函数何时会被调用?

当对象声明不带参数时自动调用:MyClass obj;—— 默认构造函数

class MyClass {
public:MyClass() {std::cout << "Default constructor called" << std::endl;}
};int main() {MyClass obj; // 自动调用默认构造函数return 0;
}

STL 容器(如 vector<MyClass>)或数组(如 MyClass arr[5])要求元素类型必须具有默认构造函数,否则无法初始化

#include <iostream>
#include <vector>class MyClass {
public:MyClass() {std::cout << "Default constructor called" << std::endl;}
};int main() {std::vector<MyClass> vec(3); // 调用 3 次默认构造函数MyClass arr[2]; // 调用 2 次默认构造函数return 0;
}
std::vector<MyClass> vec(10);  // 错误:若 MyClass 无默认构造函数// 没有默认构造函数的时候
MyClass obj;  // 错误:找不到默认构造函数

若基类未显式定义默认构造函数,派生类的默认构造函数会因无法调用基类默认构造函数而报错 

#include <iostream>class Base {
public:Base(int x) {std::cout << "Base constructor called with x: " << x << std::endl;}
};class Derived : public Base {
public:// 错误:Derived 的默认构造无法调用 Base 的默认构造// Derived() {} 
};int main() {// Derived obj; // 编译错误return 0;
}

作为类的成员变量初始化:如果一个类包含另一个类类型的成员变量,并且在该类的构造函数中没有显式初始化这个成员变量,那么会调用该成员变量类型的默认构造函数。 

class InnerClass {
public:InnerClass() {std::cout << "InnerClass default constructor called" << std::endl;}
};class OuterClass {
public:InnerClass inner;OuterClass() {std::cout << "OuterClass constructor called" << std::endl;}
};int main() {OuterClass obj;return 0;
}

     

    二、进阶

    1、类的成员变量有哪些初始化方式?优先级如何?

    初始化方式执行阶段优先级示例
    类内初始值编译期最低int m_val = 10;
    初始化列表构造函数体执行前最高MyClass(int x) : m_val(x) {}
    构造函数体内赋值构造函数体执行时中等MyClass(int x) { m_val = x; }
    • 类内初始值(C++11)​
      int m_val = 10;(声明时直接赋值,优先级最低)
    class MyClass {
    public:int m_val = 10; // 类内初始值MyClass() {std::cout << "m_val in constructor: " << m_val << std::endl;}
    };int main() {MyClass obj;return 0;
    }
    • 构造函数初始化列表
      MyClass(int x) : m_val(x) {}优先级最高,先于构造函数体执行)
    class MyClass {
    public:int m_val;MyClass(int x) : m_val(x) {std::cout << "m_val in constructor: " << m_val << std::endl;}
    };int main() {MyClass obj(20);return 0;
    }
    • 构造函数体内赋值
      MyClass(int x) { m_val = x; }(会覆盖前两种初始化)
    class MyClass {
    public:int m_val = 10; // 类内初始值MyClass(int x) {m_val = x; // 构造函数体内赋值std::cout << "m_val in constructor: " << m_val << std::endl;}
    };int main() {MyClass obj(30);return 0;
    }
    • 初始化顺序​:按成员声明顺序执行,与初始化列表顺序无关(如A() : y(10), x(y)可能导致x使用未初始化的y
    • 性能对比​:初始化列表直接构造,而构造函数体内赋值需先默认构造再赋值(对复杂对象有性能差异)

    2、静态成员变量的初始化方式是怎样的?

    静态成员变量属于类而不是类的某个对象,需要在类外进行初始化。

    class MyClass {
    public:static int s_val;
    };int MyClass::s_val = 10; // 类外初始化

    如果静态成员变量是常量整数类型(如const int),可以在类内进行初始化。 

    class MyClass {
    public:static const int s_const_val = 20;
    };
    

    三、高阶

    1、列表初始化的底层原理是什么?何时会触发std::initializer_list构造函数?

    编译器将{1,2,3}转换为临时数组const int[3],并生成std::initializer_list对象(包含数组指针和大小)

    触发条件​:

    • 类定义了std::initializer_list参数的构造函数
    • 优先匹配规则​:当存在initializer_list构造函数时,{}语法会强制优先调用该版本
    vector<int> v1(3,5);   // 生成[5,5,5]
    vector<int> v2{3,5};   // 生成[3,5],优先调用initializer_list版本

    在模板编程中,列表初始化可以让模板函数或类更灵活地处理不同类型的初始化列表。另外,当使用列表初始化创建对象时,如果类没有合适的std::initializer_list构造函数,但有其他可以接受相应参数的构造函数,编译器会尝试进行普通的构造函数匹配。

    template<typename T>
    void printList(const std::initializer_list<T>& list) {for (const auto& element : list) {std::cout << element << " ";}std::cout << std::endl;
    }int main() {printList({1, 2, 3, 4});printList({'a', 'b', 'c'});return 0;
    }

    2、C++17对枚举类型的初始化有何优化?请举例说明

    C++17允许直接通过整型值列表初始化枚举类型,无需显式转换

    enum class Month : int { Jan=1, Dec=12 };
    Month m{12};  // C++17合法,等同于static_cast<Month>(12)

     

    http://www.dtcms.com/wzjs/180924.html

    相关文章:

  • 建设网站如何优化关键词流量点击推广平台
  • 揭阳 网站建设咨询网络服务商
  • 做网站 杭州百度提交入口网址是指在哪里
  • 响应式网站是怎么做的衡阳seo
  • 网站可以做库存吗广告公司怎么找客户资源
  • 公司建立网站流程seo咨询邵阳
  • 便宜做网站线上营销策划方案
  • 法院网站建设百度网站排名seo
  • 学习php网站开发怎么样企业网站设计欣赏
  • 商业网站建设比较好的搜索引擎
  • 盐亭做网站软文模板
  • 做网站一年赚80亿做网站的软件有哪些
  • 淘客网站seo怎么做公司网站开发费用
  • wordpress站长网络营销就是seo正确吗
  • crm管理系统怎么用宁波正规seo推广公司
  • 杭州网站建设工作室百度手机助手安卓版
  • 昆明网站建设搭建抖音seo怎么收费
  • 学校能建设网站吗新东方烹饪学校学费一年多少钱
  • 网站建设的实验步骤seo关键字怎么优化
  • 一二三四影视在线观看免费视频茂名seo快速排名外包
  • 网站出售html拉新推广平台有哪些
  • 通州建设局网站做网站的平台有哪些
  • wordpress 模板开发河南网站seo推广
  • 起名网站怎么做百度搜索引擎算法
  • 网站推广与宣传怎么做大数据营销推广精准粉
  • 辽宁鲲鹏建设集团网站福州整站优化
  • 网站广告尺寸宣传推广图片
  • 做茶叶网站app推广公司
  • 成都网站制作公司 dedecms专业网络推广机构
  • 什么网站做3d模型能赚钱百度网盘网页登录入口