使用三元运算符初始化 class 对象错误

initializtion class object error using ternary operator

我正在尝试使用三元运算符创建对象,但每次都只调用第一个。这是我的简单代码:

bool itTrue(int x, int y){
  if(x>y)
     return true;
  return false;
}
class myClass {
    public:
       myClass(int x){
          val=x;
      }
       myClass(int x, int y){
          val=x*y;
      }
      val=0;
 };
int main(){
   aa=5;
   bb=6;
   myClass cc = isTrue(aa,bb) ? (aa,bb) : (bb,bb);
   cout<<cc.val<<endl;
   return 0;
}

一些如何,使用调试器,调用 isTrue 函数后,被调用的构造函数是使用一个对象的构造函数: myClass(int x) 但我想同时使用这两个参数,如何调用另一个参数: myClass(int x, int y) 使用三元运算符?

在你尝试回答你自己的整个问题之前,我们应该看看当我们简化它以不包括三元运算符时会发生什么:

myClass cc = (aa, bb);

这也会调用单参数构造函数,因为这不是将参数传递给构造函数的方式,它与

不同
myClass cc(aa, bb);

相反,您正在做的是调用 "comma operator"。您应该查看传递给单值构造函数的值是什么,您会发现它是 bb.

的值
#include <iostream>

class A {
public:
    A(int a) {
        std::cout << "single " << a << '\n';
    }
    A(int a, int b) {
        std::cout << "double " << a << ',' << b << '\n';
    }
};

int main()
{
    int aa = 5;
    int bb = 6;

    A a = (aa, bb);
}

http://ideone.com/wapbv9

逗号运算符计算左边的表达式,丢弃它并计算右边的表达式。所以你实际写的是:

(void)aa;  // a way to say "evaluate this and ignore it"
A a = bb;

为了实现您想要实现的目标,您需要构建 class:

的实例
myClass cc = isTrue(aa, bb) ? myClass(aa, bb) : myClass(bb, bb);