当前位置:  开发笔记 > 编程语言 > 正文

Pro/con:在条件语句中初始化变量

如何解决《Pro/con:在条件语句中初始化变量》经验,为你挑选了1个好方法。

在C++中,您可以在if语句中初始化变量,如下所示:

if (CThing* pThing = GetThing())
{
}

为什么会考虑这种糟糕或好的风格?有什么好处和坏处?

我个人喜欢这种风格,因为它限制了pThing变量的范围,因此当它为NULL时永远不会意外使用它.但是,我不喜欢你不能这样做:

if (CThing* pThing = GetThing() && pThing->IsReallySomeThing())
{
}

如果有办法完成上述工作,请发布.但如果那是不可能的,我仍然想知道为什么.

从这里借来的问题,类似的主题,但PHP.



1> 小智..:

重要的是C++中的声明不是表达式.

bool a = (CThing* pThing = GetThing()); // not legit!!

您不能在if语句中同时执行声明和布尔逻辑,C++语言规范特别允许表达式或声明.

if(A *a = new A)
{
    // this is legit and a is scoped here
}

我们如何知道在一个表达式中是否在一个术语和另一个术语之间定义?

if((A *a = new A) && a->test())
{
    // was a really declared before a->test?
}

咬紧牙关并使用内部if.范围规则很有用,您的逻辑是明确的:

if (CThing* pThing = GetThing())
{
    if(pThing->IsReallySomeThing())
    {
    }
}

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有