// in a.h
#include <iostream>
#include <vector>
typedef std::vector<double> Array;
class A
{
public:
A(int n);
private:
Array m;
};
//in a.cpp
#include "a.h"
A::A(int n)
{
m = Array(n, 0.0);
}
我想在A的构造函数中初始化m。括号的表达式是否在类名(std::vector<double>
)之后直接带有一些参数?
之间的区别是什么
Array m(n,0.0)
和
m=Array(n,0.0)
?
答案 0 :(得分:5)
是的,这是合法的。 ClassName()
调用该类的构造函数。
注意:从技术上讲,构造函数没有名称,因此在名称查找期间找不到它,因此ClassName()
实际上是使用_results in_的函数表示法的显式类型转换调用构造函数(根据c ++标准12.1.2)。
Array m(n,0.0)
通过调用m
的接受3个参数的构造函数来创建类Array
的变量Array
。
MyClass m = Array(n,0.0)
通过使用3个参数调用Array
的构造函数创建类Array
的未命名变量,然后将该未命名变量复制到m
,但很可能由于copy elision,编译器将对其进行优化。但是,如果将其更改为MyClass m; m = Array(n,0.0)
,则将调用后跟赋值运算符的构造函数。