If语句和大括号.有/没有不同的结果

If Statements And Braces.. Different Result With/Without

本文关键字:结果 If 语句      更新时间:2023-10-16

好吧,我在学习c++的过程中,我在使用一个教程时遇到了一个奇怪的效果,我不太明白它是怎么发生的。

对于本教程(从提供的示例复制),我在类模板专门化中编写了一个函数,该函数检查字符是否为小写,然后将其改为大写:

char uppercase ()
{
    //checks to see if "element"(char) is a lower-case letter between 'a' and 'z'
    if ((element >= 'a') && (element <= 'z'))
    {
        //changes value of "element" to be element + (value of A - Value of a)[-32]
        element += 'A' - 'a'; //element = element + -32
        return element;
    };
};

现在,奇怪的是. .即使字符已经是大写的,这段代码仍然会被触发。所以如果我用一个值j来调用这个函数,很明显我得到的是j,和预期的一样。然而,如果我调用的值是'J',函数仍然会经过…所以不是函数不改变任何东西,而是返回'*'。

现在,有趣的是……如果我从if语句中去掉括号,它就会正常工作。所以,与

char uppercase ()
{
    //checks to see if "element"(char) is a lower-case letter between 'a' and 'z'
    if ((element >= 'a') && (element <= 'z'))
        //changes value of "element" to be element + (value of A - Value of a)[-32]
        element += 'A' - 'a'; //element = element + -32
        return element;
};

它完全按预期工作。用值'J'调用函数只返回'J',因为没有满足条件,因此没有执行任何代码。现在,我知道大括号在if语句中是可选的,但是教程说大括号在多个语句中是必需的。

还值得注意的是,在语句中使用大括号和普通的返回语句添加else可以达到预期的效果,但这应该是不必要的,对吗?

所以,基本上……我错过了一些关于大括号,或者这只是一个问题与编译器(Visual Studio 2012)?

这是每个设计,if只接受一个语句,大括号使一个块语句。

如果你想要缩进作用域,使用Python。

您的代码的问题是,当if语句不匹配时,您不返回任何东西,这会导致未定义的行为。你的编译器可能会给你一个警告。不要忽略编译器的警告。

第二段代码实际上是你想要的,当你的if匹配时,只改变变量element,但总是返回变量element

在第一种情况下,如果不满足条件,则不执行return语句。假设函数返回的是垃圾。

在第二种情况下,因为没有大括号,所以只有一行依赖于条件。不管怎样,return语句都会被执行。换句话说,第二个例子相当于:

char uppercase ()
{
    //checks to see if "element"(char) is a lower-case letter between 'a' and 'z'
    if ((element >= 'a') && (element <= 'z'))
    {
        //changes value of "element" to be element + (value of A - Value of a)[-32]
        element += 'A' - 'a'; //element = element + -32
    }
    return element;
};

您有一个if语句。如果语句的计算结果为true,它将执行紧跟其后的操作。为了一次执行多个操作,必须将它们用花括号括起来。

你得到一个奇怪的答案,因为如果J 大写,你的if语句是假的,你跳过大括号,你没有指定的返回值(因此无意义的返回值)。如果if语句为真,则需要说明返回什么。

第二段代码可以工作,因为只有if语句后的第一行是由if控制的。这实际上是你的幸运-如果你想做两个操作,你仍然会得到垃圾。因此,通过将if语句置于花括号中来显式指定要执行的代码通常是一种良好的实践,即使它只是一个操作。