使用三元运算符初始化 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);
}
逗号运算符计算左边的表达式,丢弃它并计算右边的表达式。所以你实际写的是:
(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);
我正在尝试使用三元运算符创建对象,但每次都只调用第一个。这是我的简单代码:
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);
}
逗号运算符计算左边的表达式,丢弃它并计算右边的表达式。所以你实际写的是:
(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);