遇到的问题

遇到的问题

这个文章用于记录在学习和使用C++的时候遇到的一些问题,以及解决方法,记载了一些非常零散的知识点,没有主题。

new申请结构体,并初始化结构体中的数组

C++11中,有一种新的方法在用new运算符申请结构体内存的同时对其初始化。其格式为:

struct car{
    int years;
    double price;
};

car * p = new car{3, 23.5};

但是如果结构体中包含了字符数组(字符串),就不能使用这种格式,例如:

struct car{
    char name [20];
    double price;
};

car c {"Ford", 23.4};   //合法,在声明的时候可以用字符串的形式对数组进行初始化
car * p = new car {"Ford", 23.4};//非法,无法用该参数列表构造出car,不能将字符串转换成字符数组
car *c = new car{{'F','o','r','d'}, 23.4};//合法,用数组的形式传入参数,而不是字符串形式

造成这一错误的原因是因为,在new调用car的构造函数时,不能将字符串形式的参数转换成字符数组。

在类中定义静态变量,静态指针

在类中定义的静态变量属于该类,并且就算没有任何关于该类的对象,也能通过域解析符::来访问类中的变量,但是前提是,类中的静态变量已经被初始化。
在类中定义一个静态变量的时候,系统是不会为它分配内存的,只有等到初始化的时候才会进行分配。所以可以直接在类中定义的静态变量的时候进行初始化,例如:

class Test{
public:
	static int x = 0;
}

但是这样有一个限制,就是在初始化这个静态变量的时候只能使用一个常量对其进行初始化,这样的方式很不灵活。此时可以在类中定义静态变量的时候不对其初始化,而在类外对其初始化,例如:

class Test{
public:
	static int x;
}

int y = 19;
int Test:x = y;

这样就能用一个变量对类内的静态变量进行初始化,注意这里是初始化,不是赋值,所以语句的一开头有一个int。如果没有对其进行初始化,系统不会为其分配内存,也就不能赋值。
另外,对类中的静态成员的初始化只能在函数外的全局代码域进行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值