zoukankan      html  css  js  c++  java
  • 第二次课

    安全函数

    strcpy/strcat/strlen有安全隐患, 都以''结尾, 有安全隐患

    char * strcpy ( char * destination, const char * source );

    windows下的安全函数
    errno_t strcpy_s( char *dest, rsize_t dest_size, const char *src);字节数

    errno_t __cdecl strcpy_s(_Out_writes_z_(_SizeInBytes) char * _Dst, _In_ rsize_t _SizeInBytes, _In_z_ const char * _Src);
    errno_t __cdecl wcscpy_s(_Out_writes_z_(_SizeInWords) wchar_t * _Dst, _In_ rsize_t _SizeInWords, _In_z_ const wchar_t * _Src);

    只会拷取指定长度字符, debug版和release版有区别

    linux下的安全函数
    char *strncpy(char *dest, const char *src, size_t n);

    字符编码

    ASCII, Unicode, utf-8, gbk, big5

    gbk: VS下的中文编码方式

    Unicode: 通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以, VS中的编码

    utf-8: 可变长度, 根据前导来判断字节长度, 网络通信倾向于utf-8

    网络传输中要把其他字符转换成utf-8发送来接收

    wchar_t* ps = L"中国人";
    char* p = "xxx";
    
    int WSAAPI send(	// WSAAPI表示windows socket api
      SOCKET     s,
      const char *buf,
      int        len,
      int        flags
    );
    
    int n = send(s, (const char*)ps, 6, 0);	// 发送''字符应该是8
    

    VS中预编译头文件必须写在第一行

    匈牙利命名法

    //sz/psz
    
    char buf[64];
    
    char szBuf[64];  // string terminated with zero
    
    char* psz = "helloworld";	// point to size terminated with zero?
    
    int nName;
    
    float fName;
    
    DWORD dwName;
    
    WORD wName;
    
    int g_Name;	// 全局变量
    
    class A {
    private:
    ​	int m_iName;	// 私有成员
    };
    
    HWND hwndName;
    
    HINSTANCE hName;
    
    HDC hdcName;
    

    对于 for-each 循环,尽量使用 const &,其次是 &,最后才是拷贝

    for (const Json::Value& jMarketBookLevel : jData)
    {
           //循环中不会修改 jData 的值                        
    }
    
    for (Json::Value& jMarketBookLevel : jData)
    {
           //循环中会修改 jData 的值                        
    }
    
    for (Json::Value jMarketBookLevel : jData)
    {
           //循环中需要拷贝 jData 的值做修改                      
    }
    

    在 Visual Studio 菜单【Tools】->【Options】-> 【Text Editor】-> 【C/C++】-> 【Tabs】将 Tab size 设置成插入四个空格,而不是插入 。

    申请内存或者栈变量大数组(长度超过 4)尽量使用 4 的倍数

    //错误的做法
    char sz[99];
    
    //正确的做法
    char sz[100];
    

    成员变量名称对齐

    正确的做法

    class CKafkaMDClient :public CMarketBase
    {
    private:
    	KafkaMDHandler	                     *m_pMDhandler;
    	KConsumer		                     *m_pSnapConsumer;
    	KConsumer		                     *m_pIncConsumer;
    	std::vector<RdKafka::TopicPartition*> m_vecIncTopicpartitionList;
    	std::string		                      m_strSnapTopic;
    	std::string		                      m_strIncTopic;
    
    	using SnapInstrumentMap = CHashMap<char *, SnapInstrument *, HashString>;
    	SnapInstrumentMap                     m_snapInstrumentMap;
    };
    

    错误的做法

    class A
    {
    private:
    	// 指向CFtdcMduserApi实例的指针
    	CQdFtdcMduserApi *m_pUserApi;
    	CQdFtdcReqUserLoginField m_reqUserLogin;
    	CMDFlowManager *m_pFlowManager;
    
    	CFTDCPackage m_mdMessage;
    	//收报每个报文之前确定主题号
    	int m_nTopicID;
    	int m_nTopicType;
    	//收到每个报文之前确定序号
    	int m_nSequenceNo;
    	//每个api的号
    	int m_nNumber;
        bool m_wsSend;
    
        QuWSFront *m_qwsfront;
    	CMarketDataHandler *m_pMarketDataHandle;
    	CTradingDayType m_tradingDay;   
    };
    

    子类重写父类的函数需要加上override关键字, 不用加 virtual

    class A : B
    {
    public:
        void OnRtnMBLMarketData(CQdFtdcMBLMarketDataField *pMBLMarketData) override;
    };
    

    尽量将类的基元数据类型(bool, char, short, int, long, 指针类型)放在一起

    正确做法

    class A
    {
    private:
    	bool c;
    	int  a;
        int  b;
        bool d
        bool c;
        st   s;
        CXX  xx;
    };
    

    错误做法

    class A
    {
    private:
    	int  a;
    	st   s;
        int  b;
        CXX  xx;
        bool c;  
    };
    
  • 相关阅读:
    bzoj1861 [Zjoi2006]Book 书架
    bzoj1208 [HNOI2004]宠物收养所
    bzoj1588 [HNOI2002]营业额统计
    bzoj3295 [Cqoi2011]动态逆序对
    bzoj2716 [Violet 3]天使玩偶
    bzoj1176 [Balkan2007]Mokia
    bzoj3262 陌上花开
    spoj FTOUR2
    bzoj2152 聪聪可可
    poj1741 Tree
  • 原文地址:https://www.cnblogs.com/hesper/p/10642483.html
Copyright © 2011-2022 走看看