好的,所以我正在学习 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)?