我想把一些东西从初始化列表中移出,我应该怎么做
I want to move something out of an initialisation list, how should I do it?
以前我有:
MyClass::MyClass() : myMember(VALUE,this,5,"etc.") { ... }
但我需要对传递给myMember的构造函数的值进行一些计算。如何在构造函数主体中初始化myMember
?我不确定我是否应该这样做:
MyMember myMember(calculatedValue,this,5,"etc.");
所有成员初始化都发生在构造函数主体运行之前。所以如果你这样做:
MyClass::MyClass()
{
myMember = MyMember(calculatedValue,this,5,"etc.");
}
这将是分配,而不是初始化。因此,如果MyMember
不可赋值(例如,它们有一个私有赋值运算符),它就不起作用。如果myMember
被声明为const
,它也不会起作用。
然而,你可以这样做:
class MyClass {
public:
MyClass() : myMember(calculate(VALUE),this,5,"etc.") {}
private:
static int calculate(int x) { return x*3; }
};
或者类似的东西:
class MyClass {
public:
MyClass() : myMember(createMember()) {}
private:
static MyMember createMember(int x) {
MyMember m;
m.foo = 5;
...
return m;
}
};
注意,我在这里使用了static
辅助函数,因为在构造函数完成之前使用非static
成员函数在一般情况下会有点奇怪。
如果在MyClass
的构造函数内分配myMember
成员,那么实际上是在调用MyMember
的默认构造函数,然后调用赋值运算符。
如果它对你来说很好,那么你只需要写:
MyClass::MyClass()
{
myMember = MyMember(calculatedValue,this,5,"etc.");
}
否则,您需要一种不同的方法。
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 我应该声明所有不抛出 noexexcept 的成员/函数吗?
- 我应该在C++中手动写出"sub-results"吗?
- 我应该使用 std::cerr 和 exit() 而不是抛出异常
- 明确给出该数字时,我应该参考std ::向量大小
- 我应该移至面向对象的编程(黑匣子)以及如何
- 如果两者都会给出相同的结果,我应该更喜欢加法或逻辑 OR 运算符吗?
- 头文件中定义的多个结构 - 我是否应该将它们移出单独的 h 和 cpp 文件中
- 我应该声明一个方法 no除非它在正确使用时永远不会抛出
- 我应该将一个临时变量移到一个变量中吗
- 我应该在哪里捕获构造函数中抛出的C++异常
- 我想把一些东西从初始化列表中移出,我应该怎么做
- 我应该抛出异常吗?
- 我应该返回一个值还是抛出一个异常…
- 我该如何将我的长函数移出主窗口(QT)
- 我应该如何打印出返回类型为char的string和int的数据成员?
- 我应该为底部的 Admob 横幅留出多少空间