为什么这些礼帽在这样使用时会有所不同?
why does these toupper work different when utilized like this?
为什么一个给我一个整数而另一个没有?:
toupper(member_names[2]);
和:
member_names[2] = toupper(member_names[2]);
toupper
接受一个字符(出于大多数历史原因编码为 int
)和 returns 该字符的大写形式。
因此,您的第一个版本并没有真正完成任何事情。您的第二个将 member_names[2]
转换为其等效的大写字母。
另请注意(在大多数实现中)a char
可以具有负值(例如,ISO 8859-* 中的重音字符)。将负值传递给 toupper
can/will 会导致(严重的)问题——除非 member_names
是 unsigned char
的数组,您通常希望大小写为 unsigned char
在传递给 toupper
之前:
member_names[2] = toupper(static_cast<unsigned char>(member_names[2]));
toupper
函数不修改其参数。
所以这个调用:
toupper(member_names[2]);
returns 您忽略的值。
另一个版本从 toupper
函数中获取值并将其分配给 member_names[2]
从而修改先前的值。
为什么一个给我一个整数而另一个没有?:
toupper(member_names[2]);
和:
member_names[2] = toupper(member_names[2]);
toupper
接受一个字符(出于大多数历史原因编码为 int
)和 returns 该字符的大写形式。
因此,您的第一个版本并没有真正完成任何事情。您的第二个将 member_names[2]
转换为其等效的大写字母。
另请注意(在大多数实现中)a char
可以具有负值(例如,ISO 8859-* 中的重音字符)。将负值传递给 toupper
can/will 会导致(严重的)问题——除非 member_names
是 unsigned char
的数组,您通常希望大小写为 unsigned char
在传递给 toupper
之前:
member_names[2] = toupper(static_cast<unsigned char>(member_names[2]));
toupper
函数不修改其参数。
所以这个调用:
toupper(member_names[2]);
returns 您忽略的值。
另一个版本从 toupper
函数中获取值并将其分配给 member_names[2]
从而修改先前的值。