QString C程序员的注意事项

来源:互联网 发布:现货知乎 编辑:程序博客网 时间:2024/06/02 18:51

C程序员的注意事项

由于C++的类型系统和QString是隐含共享的事实,QString也许会被看做整型或者其它简单基本类型。例如:

    QString boolToString( bool b )    {        QString result;        if ( b )            result = "True";        else            result = "False";        return result;    }  

变量result是一个分配在栈中的自动变量。当return被调用时,因为我们正在返回值,复制构造函数被调用并且这个字符串的一个复制被返回。(我们要感谢隐含共享,没有实际的复制发生,请看下面。)

在Qt的源代码中,你将会遇到想这样的QString的用法:

    QString func( const QString& input )    {        QString output = input;        // 处理输出        return output;    }  

从input到output的“复制”几乎和复制指针一样快,因为后面的场景复制是通过增加引用计数器来实现的。QString操作是基于写时复制的,只有在实例发生实际改变时,才会被复制。

如果你想不丢失任何Unicode信息的情况下创建一个QString的深度复制,那么你应该使用QString中用QChar*作为参数的构造函数。例如:

    QString a("abcd");    QString b( a.unicode(), b.length() );  

另外,使用QString中用const char*参数的构造函数就足够了。例如:

    QString a("abcd");    QString b( a.latin1() );  

也可以参考QChar、QCString、QByteArray、QConstString、隐含和明显共享类、文本相关类和非图形用户界面类。