加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 扩展在if / else序列中初始化的变量的范围

发布时间:2020-12-16 10:41:07 所属栏目:百科 来源:网络整理
导读:我正在编写一段代码,我希望根据条件使用不同的类构造函数.到目前为止,我已经使用if和else语句来构造对象,但实例被“捕获”在括号中,不能在代码中进一步使用. 这是代码中的样子: if (my_boolean){ MyClass my_object(arg1); //calling a first constructor}e
我正在编写一段代码,我希望根据条件使用不同的类构造函数.到目前为止,我已经使用if和else语句来构造对象,但实例被“捕获”在括号中,不能在代码中进一步使用.

这是代码中的样子:

if (my_boolean){
    MyClass my_object(arg1); //calling a first constructor
}
else {
    MyClass my_object(arg1,arg2); //calling another constructor
}
//more code using my_object

到目前为止,我尝试使用static关键字但没有成功.是否存在有条件地使用不同构造函数而不必重新定义构造函数的常用方法?

解决方法

尝试以下:)

MyClass my_object = my_boolean ? MyClass(arg1) : MyClass(arg1,arg2);

考虑到即使该类没有默认构造函数,此代码也能正常工作.

这是一个示范性的例子

#include <iostream> 
#include <cstdlib>
#include <ctime>

int main () 
{
    struct Point
    {
        Point( int x ) : x( x ) {}
        Point( int x,int y ) : x( x ),y( y ) {}
        int x = 0;
        int y = 0;
    };

    std::srand( ( unsigned )std::time( 0 ) );

    Point p = std::rand() % 2 ? Point( 1 ) : Point( 1,2 );

    std::cout << "p.x = " << p.x << ",p.y = " << p.y << std::endl;  

    return 0; 
}

我得到了以下输出

p.x = 1,p.y = 2

你得到了什么输出?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读