c++ - 关于类(class)的问题

标签 c++

<分区>

Possible Duplicates:
Why should I prefer to use member initialization list?
C++ - what does the colon after a constructor mean?

代码如下

class vector2d {
public:
  double x,y;
  vector2d (double px,double py): x(px), y(py) {}

我不明白这一行

 vector2d (double px,double py): x(px), y(py) {} 

是不是一样 vector2d(double px,double py){ x=px;y=py;}? 或者?

最佳答案

是的,在你的例子中是一样的。然而,有一个细微的差别:x(px) 将 x 初始化为 px,但 x=px 对其进行赋值。您不会知道 double 变量的区别,但如果 x 是一个类,就会有很大的区别。让我们假设 x 是 foo 类型的类:

x(px) 将调用 foo 复制构造函数 foo::foo(foo &classToCopyFrom)。

另一方面,

x=px 将首先调用 foo 默认构造函数,然后调用 foo 赋值运算符。

这是在大多数情况下您应该更喜欢 x(px) 的一个很好的理由。

关于c++ - 关于类(class)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3276589/

相关文章:

c++ - 为什么在 C++ 中创建单例类时静态函数不能引用静态变量?

c++ - 为什么 printf 不格式化 unicode 参数?

C++ 检查返回码

c++ - 我希望程序打印数字 0 到 99,但是当我运行代码时,我看到 100 行 99

c++ - 检查 UTF-8 字符串在 Qt 中是否有效

c++ - 迭代模板参数列表?

c++ - 添加额外参数以禁用输出

c++ 将 find() 映射到可能的 insert() : how to optimize operations?

c++ - 如何禁用某些模板类型的类成员函数

c++ - 0x0040 和管道符号在这里表示什么?