根据我的理解,这样做:
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 ----
char temp1 = mychar;
bool temp2 = temp1 >= 'a' && temp1 <= 'z';
// -----------------------------
bool mybool = temp2;
std::cout << mybool;
return 0;
}
由于c
中isLetter
的值未经修改,我可以通过“传入常量引用”来缩短过程。 const
前缀对程序有无影响;它只是编译器和I之间的协议。引用前缀&
是重要的部分,因为它意味着函数将使用实际变量c
而不是它的副本temp1
。
因此,
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;
}
嗯,这是我的理解。
几个问题:
c >= 'a' && c <= 'z'
是安全的还是不好的做法,因为可能有一些系统上的ASCII值没有按常规方式排序?感谢。我正在尝试回顾C ++原则,因为我正在接受面试。
答案 0 :(得分:1)
z
之后将始终a
)reference
将按值传递,复制的开销比复制字符本身要多。pointer
或reference
返回给本地变量。当函数返回时,变量将不再存在,pointer
或reference
将无效,使用它们将导致未定义行为。