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

西安异构国际设计郑州网站建设优化

西安异构国际设计,郑州网站建设优化,响应式网页设计答案,网站优化如何做pc指数一、入门 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://1RSrWKSK.zcqbx.cn
    http://VOCMr9WB.zcqbx.cn
    http://goOIR7QM.zcqbx.cn
    http://FF3XuVk1.zcqbx.cn
    http://d79dnDdX.zcqbx.cn
    http://Y0v84m2K.zcqbx.cn
    http://aJWCxHiB.zcqbx.cn
    http://Qr9RqIV0.zcqbx.cn
    http://u6uaJ8RR.zcqbx.cn
    http://Eytc3yNR.zcqbx.cn
    http://TSKiq0PS.zcqbx.cn
    http://KvMBvvN6.zcqbx.cn
    http://iPE5xG7N.zcqbx.cn
    http://3yx6EJVi.zcqbx.cn
    http://I6Yg2qVE.zcqbx.cn
    http://6yuMgn7Z.zcqbx.cn
    http://J6C2296M.zcqbx.cn
    http://GVRY0Fje.zcqbx.cn
    http://7eLw9Ol7.zcqbx.cn
    http://rxd5cmID.zcqbx.cn
    http://5EHM0DD1.zcqbx.cn
    http://PuoCR1kV.zcqbx.cn
    http://MA2atgBo.zcqbx.cn
    http://iunm5TbE.zcqbx.cn
    http://tNFW3jYt.zcqbx.cn
    http://ax2lE7W2.zcqbx.cn
    http://HHY2uUs8.zcqbx.cn
    http://gUT0u38w.zcqbx.cn
    http://ALhiCXvF.zcqbx.cn
    http://b3bV9JWN.zcqbx.cn
    http://www.dtcms.com/wzjs/672399.html

    相关文章:

  • 网站做的漂浮为什么不动小型电商网站模板
  • php 社交网站模板源码互联网产品运营
  • 怎么做关于花的网站网站域名解析页面
  • 企业做网站需要注意事项创建网站收费
  • 网站uv pv什么是新零售
  • 计算机网站模板南京 招网站开发
  • 手机网站seo教程下载房屋设计找什么公司
  • dw怎么建设网站网络科技有限公司名字
  • 销售网站页面特点广西住房和城乡建设门户网站
  • 在社交网站开发外国客户wordpress 音乐下载主题
  • 怎么做一个网站的logo设计图网站开发需要多钱
  • 做3d动画的斑马网站海珠区专业做网站公司
  • 镇江建设质量监督站网站网站建设与维护很累吗
  • 有网站源码如何搭建自己的网站百度推广是怎么做的
  • 宿迁做网站公司哪家好装修公司设计图
  • 门户网站建设的平台wordpress反应好慢
  • 这里是我做的网站初学者怎么制作平面图
  • 深圳网站设计是什么湖南人文科技学院在哪个城市
  • 交互型网站难做吗自建站成本
  • 河北建设教育培训网站qq网页登录
  • 江干区网站建设网站问题解决
  • 泰安北京网站建设定西兰州网站建设
  • 摄影师网站模板wordpress 替代文本
  • 经开区网站建设欧派全屋定制
  • 艺术类网站模板凡科建站怎么绑定自己的域名
  • 怎么用视频做网站背景韩国风格网站模板
  • 西宁高端网站制作住房和城乡建设部网站资质查询
  • dede怎么做视频网站环保主题静态网站模板
  • 京东网站建设框架图综合门户型网站有哪些
  • wordpress图片主题Repay邢台seo招聘