了解しました。現在、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)の問題ですか?