// 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);
}
Run Code Online (Sandbox Code Playgroud)
我想在A的构造函数中初始化m.括号的表达式是否在类名(std::vector<double>)合法之后直接带有一些参数?
什么是Array m(n,0.0)
和
m=Array(n,0.0)?之间的区别
?
是的,这是合法的.ClassName()调用该类的构造函数.
注意:从技术上讲,构造函数没有名称,因此在名称查找期间找不到它,因此ClassName()实际上是使用_results in_调用构造函数的函数表示法的显式类型转换(根据c ++标准12.1.2) ).
Array m(n,0.0)通过调用接受3个参数的构造函数来创建m类的变量.ArrayArray
MyClass m = Array(n,0.0)Array通过调用Array带有3个参数的构造函数创建类的未命名变量,然后将该未命名变量复制到其中m,但很可能编译器会通过复制省略来优化它.但是,如果将其更改为MyClass m; m = Array(n,0.0),则将调用后跟赋值运算符的构造函数.
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |