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;
    }