好吧,我正在学习 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;
};
};
现在,奇怪的是..即使字符已经是大写,这段代码仍然会被触发。因此,如果我调用值为“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 语句中大括号是可选的,但教程说多个语句需要大括号。
还值得注意的是,使用大括号和简单的 return 在语句中添加 else 可以达到预期的效果,但这应该是不必要的,对吗?
所以,基本上..我是否遗漏了有关大括号的内容,或者这只是编译器的问题(Visual Studio 2012)?