MFC总结(17) --- CString 参数传递问题

转载 2015年11月19日 15:43:58

标题:MFC中关于CString 参数传递

作者:厚道心得

原文章地址:http://blog.sina.com.cn/s/blog_3f59eb3d010008a8.html


<CString 参数传递约定>
  当定义类接口时,必须确定为成员函数确定参数传递约定。现在有一些传递和返回 CString 对象的标准规则。如果遵循作为函数输入的字符串和作为函数输出的字符串中所述的规则,那么将得到正确而又有效的代码。

<作为函数输入的字符串>
  如果字符串是某个函数的输入,在大多数情况下,最好将该字符串函数参数声明为 LPCTSTR。在函数中根据需要使用构造函数和赋值运算符将其转换为 CString 对象。如果一个函数将要更改字符串的内容,那么将参数声明为非常数的 CString 引用 (CString&)。

<作为函数输出的字符串>
   通常情况下,可以从函数返回 CString 对象,因为 CString 对象遵循基元类型那样的值语义。要返回只读字符串,则使用常数 CString 引用 (const CString&)。以下示例阐释 CString 参数的使用方法和返回类型:

class CName : public CObject
{
private:
    CString m_firstName;
    char m_middleInit;
    CString m_lastName;
public:
    CName() {}
    void SetData( LPCTSTR fn, const char mi, LPCTSTR ln )
    {
        m_firstName = fn;
        m_middleInit = mi;
        m_lastName = ln;
    }
    void GetData( CString& cfn, char mi, CString& cln )
    {
        cfn = m_firstName;
        mi = m_middleInit;
        cln = m_lastName;
    }
    CString GetLastName()
    {
        return m_lastName;
    }
};
...
CName name;
CString last, first;
TCHAR middle;
name.SetData( "John", 'Q', "Public" );
ASSERT( name.GetLastName() == "Public" );
name.GetData( first, middle, last );
ASSERT( ( first == "John" ) && ( last == "Public" ) );
...


CString和LPVOID的转换(线程参数传递)

msdn上说,CString可以用来随意替换const char* and LPCTSTR 类型的函数形参。随意转换就是了。具体不深究,解决问题先。 声明一下使用目的:给新开线程传入CStrin...
  • ghevinn
  • ghevinn
  • 2015年04月02日 15:02
  • 1949

Cstring 内存分配机制

CString比起STL的string来说,有很多方便的地方。许多有经验的作者在他们的文章里都写过,string是一个很好用的类型,但是往往MFC程序里的许多BUG就是它引起的,典型的漏洞有:缓冲溢出...
  • mapeng892020
  • mapeng892020
  • 2015年05月16日 08:43
  • 1337

CString作为参数传递的大问题

CString 有一套传递和返回的标准准则,如果不准循该准则,在编译时,编译器能通过。但链接时,会提示该函数不可解析。 准则如下: 1.   如果CString 对象要作为函数的输入参数,在大多数情况...
  • jianjian111dd
  • jianjian111dd
  • 2015年09月30日 23:52
  • 125

三种 CString 输出方法

不含中文的情况下: CString s("hello world"); wcout wcout wcout 含有中文的情况下需要添加: wcout.imbue(std::locale...
  • overlord_bingo
  • overlord_bingo
  • 2017年03月03日 15:01
  • 1371

MFC中两个对话框之间数据传递

这里有两种情况, 第一种情况是: (在一个基于单文档的应用程序中,新建了两个对话框A和B,并且用两个独立的类和他们关联) 对话框A中有一个编辑框, 按下A中的一个按钮a后弹出对话框B, B中也有一个...
  • foreverhuylee
  • foreverhuylee
  • 2014年03月21日 11:56
  • 25567

MFC中CString的使用总结

在使用MFC的过程中,不可避免的要使用CString类型对字符串进行处理,特别常用的是CString与char*等类型的转换,现将平时常用的方法整理如下。 1.CString类型的初始化 CStrin...
  • abld99
  • abld99
  • 2016年02月29日 10:44
  • 4892

MFC中CString的使用总结

在使用MFC的过程中,不可避免的要使用CString类型对字符串进行处理,特别常用的是CString与char*等类型的转换,现将平时常用的方法整理如下。 1.CString类型的初始化 CStrin...
  • abld99
  • abld99
  • 2016年02月29日 10:44
  • 4892

CString和LPVOID的转换(线程参数传递)

msdn上说,CString可以用来随意替换const char* and LPCTSTR 类型的函数形参。随意转换就是了。具体不深究,解决问题先。 声明一下使用目的:给新开线程传入CStrin...
  • ghevinn
  • ghevinn
  • 2015年04月02日 15:02
  • 1949

CString使用(多线程、线程安全)

CString的线程安全问题 在多线程中使用一个局部CString变量相加时发现相加的结果是后一个字符串值,没有时间过多研究,只好改成了char*,不过如下方法也可以避免: CWin32Heap ...
  • CSDNCShuan
  • CSDNCShuan
  • 2017年06月07日 11:38
  • 329

[MFC]CString与其他类型的转换

在MFC中CString是字符串的常用表示方法,但是还有很多别的类型,例如数字类型等。(PS:微软的人真是不容易,折腾出这么多种类型来。。。) =============...
  • e_wsq
  • e_wsq
  • 2013年12月25日 02:16
  • 1040
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC总结(17) --- CString 参数传递问题
举报原因:
原因补充:

(最多只允许输入30个字)