Tom*_*Tom 2 c++ init undefined-behavior
我正在上课,这个疑问出现了.这是不是吗?行为?另一方面,我不确定它的推荐,或者它是一个好的做法.如果我确保在init函数中没有抛出异常,那么它是一个吗?
//c.h
class C{
float vx,vy;
friend void init(C& c);
public:
C();
};
//c.cpp
C::C()
{
init(*this);
}
void init(C& c) //throws() to ensure no exceptions ?
{
c.vx = 0;
c.vy = 0;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
这完全没问题.一旦输入构造函数的主体,所有成员都已初始化并且可以使用它们.(然后,正文将完成为创建完全构造的对象而需要完成的任何工作.)
但它的风格很差.更好的是:
C::C() :
vx(), vy() // or vx(0), vy(0) if you prefer to be explicit
{}
Run Code Online (Sandbox Code Playgroud)
并且消除所有混乱.
例外与安全无关,构造者可以自由抛出.实际上,如果您无法成功构造对象,则抛出异常是首选的操作过程.
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |