C++在同一行上声明多个对象实例的问题

Chr*_*isM 1 c++ initialization declaration object

对于家庭作业,当主类在同一行上实例化同一类的两个对象时,我很难理解行为,如下所示.请注意,赋值的对象是类的行为类似于int:

main () {
  MyClass x,y = 5;
  cout << "x = " << x << endl; // outputs x = 0...why not 5???
  cout << "y = " << y << endl; // outputs y = 5
}
Run Code Online (Sandbox Code Playgroud)

这里是头文件类定义:

class MyClass {
   public:
      MyClass(int initValue = 0); //constructor
      operator int() {return myValue}; //conversion operator to int
   private:
      int myValue;
}
Run Code Online (Sandbox Code Playgroud)

最后,我的源文件:

#include "MyClass.h"

MyClass::MyClass(int initValue) {
   myValue = initValue;
}
Run Code Online (Sandbox Code Playgroud)

为什么不像y那样用x值初始化x?

tem*_*def 7

问题是C++正在解析

MyClass x,y = 5;
Run Code Online (Sandbox Code Playgroud)

好像你写过

MyClass x;
MyClass y = 5;
Run Code Online (Sandbox Code Playgroud)

因此x,默认初始化而不是用5初始化.要解决此问题,请将行更改为读取

MyClass x = 5, y = 5;
Run Code Online (Sandbox Code Playgroud)

  • @ChrisM:如果你的导师认为"int x,y = 5;" 将x和y初始化为5,然后你需要尽快退出该类并找到一个新的教师.该行将产生一个未初始化的x和ay等于5. (2认同)
  • 您不应该尝试在同一行上初始化所有变量的一个重要原因.这样做绝对没有任何好处:将所有初始化压缩到一行不会使代码运行得更快,这只会让下一个程序员(或者在本例中为*current*programmer)的内容更难阅读.努力编写清晰直观的代码.相信编译器将处理任何必要的优化. (2认同)