C++ 如果所有I';m passing是单个字符吗?
据我所知,这样做:C++ 如果所有I';m passing是单个字符吗?,c++,C++,据我所知,这样做: bool isLetter(char c) { return c >= 'a' && c <= 'z'; } int main() { char mychar = 'j'; std::cout << isLetter(j); return 0; } 相当于 int main() { char mychar = 'j'; // ---- function procedure ----
bool isLetter(char c)
{
return c >= 'a' && c <= 'z';
}
int main()
{
char mychar = 'j';
std::cout << isLetter(j);
return 0;
}
相当于
int main()
{
char mychar = 'j';
// ---- function procedure ----
bool temp = mychar >= 'a' && mychar <= 'z';
// -----------------------------
bool mybool = temp;
std::cout << mybool;
return 0;
}
intmain()
{
char mychar='j';
//----功能程序----
bool temp=mychar>='a'&&mychar
你的理解是正确的
如果使用,ASCII字符将具有相同的顺序(z
将始终位于a
之后)
我想不是。编译器在合理的情况下会应用优化。此外,C++中的所有东西都是通过值传递的。因此,<代码>引用<代码>将通过值传递,并且比复制字符本身更能复制开销。
从不将指针
或引用
返回到局部变量。当函数返回时,变量将不再存在,指针
或引用
将无效,使用它们将导致未定义的行为
const char&
和const char
或char
之间没有任何区别。不要像这样进行优化;只需编写最符合逻辑的代码并依靠编译器进行优化。在这种情况下,除非使用糟糕的编译器,否则最终还是会得到相同的字节码(有一些在线工具可以用来验证这一点,但我建议在研究这类东西之前花更多的时间使用该语言)我喜欢使用的经验法则是:如果大于一个点,则通过常量引用进行传递。否则,通过值进行传递。至于你的最后一个问题,不要这样做。编译器可以优化通过值返回到就地赋值中,但通过引用返回会剥夺这种能力,并且你可能会得到更差的性能。@Dave,标准在哪里不能保证呢什么是ASCII?当然,如果使用ASCII,而且几乎总是使用ASCII,那么值将是ASCII定义的值。@Florisveleman,你能解释一下为什么不使用ASCII吗?如果你将指针作为参数传递给对象,那么对象将通过引用传递,而指针本身就是将被复制并通过值传递“在每个系统中,ASCII字符具有相同的值范围”--这完全是错误的。实现不需要使用ASCII,尽管其他实现很少,但它们确实存在。@hvd,正确。我的意思是排序,而不是值范围。感谢您指出。一些字符代码根本没有连续范围内的小写字母(EBCDIC的许多变体都因此而臭名昭著)。但采用ASCII是常见的,也不是不合理的。使用isalpha
等以实现最大的可移植性。对,如果您打算考虑非ASCII系统,您很可能会看到EBCDIC。
bool isLetter(const char & c)
{
return c >= 'a' && c <= 'z';
}
int main()
{
char mychar = 'j';
std::cout << isLetter(j);
return 0;
}
int main()
{
char mychar = 'j';
// ---- function procedure ----
bool temp = mychar >= 'a' && mychar <= 'z';
// -----------------------------
bool mybool = temp;
std::cout << mybool;
return 0;
}