如果声明和括号..有/无结果

时间:2013-03-25 05:03:13

标签: c++ if-statement braces

好吧,所以我正在学习C ++,我在使用其中一个教程时遇到了一个奇怪的效果,而且在发生这种情况时我并没有得到它......

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

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;
    };
};

现在,奇怪的是......即使char已经是大写的,这段代码仍会被触发。因此,如果我使用值'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)?

3 个答案:

答案 0 :(得分:3)

根据设计,if只接受一个语句,大括号会产生一个句号。

如果你想通过缩进来缩小范围,可以使用Python。

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

第二个代码块实际上是您想要的,只在element匹配时更改变量if,但始终返回变量element

答案 1 :(得分:2)

在第一种情况下,如果不满足条件,则不执行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;
};

答案 2 :(得分:0)

你有一个if语句。如果语句的计算结果为true,它将立即执行该操作。为了一次执行多个操作,必须将它们用大括号括起来。

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

你的第二段代码可以工作,因为只有if语句之后的第一行由if控制。这基本上是你在这里很幸运 - 如果你有两个你想做的手术,你仍然会变得垃圾。因此,通常通过将if语句放在大括号中来明确指定要执行的代码,即使它是一个操作也是一种好习惯。