none
结构体用等号赋值 RRS feed

  • 常规讨论

  • 最近在看《Windows 核心编程》
    其中08-Queue,我有个疑问:
    先看代码:

    class CQueue {
    public:
       struct ELEMENT {
          int   m_nThreadNum;
          int   m_nRequestNum;
          // Other element data should go here
       };
       typedef ELEMENT* PELEMENT;
    
    private:
       struct INNER_ELEMENT {
          int      m_nStamp;  // 0 means empty
          ELEMENT  m_element;
       };
       typedef INNER_ELEMENT* PINNER_ELEMENT;
    
    private:
       PINNER_ELEMENT m_pElements;      // Array of elements to be processed
       int            m_nMaxElements;   // Maximum # of elements in the array
       int            m_nCurrentStamp;  // Keep track of the # of added elements
       
    private:
       int GetFreeSlot();
       int GetNextSlot(int nThreadNum);
    
    public:
       CQueue(int nMaxElements);
       ~CQueue();
       BOOL IsFull();
       BOOL IsEmpty(int nThreadNum);
       void AddElement(ELEMENT e);
       BOOL GetNewElement(int nThreadNum, ELEMENT& e);
    };


    然后

    void CQueue::AddElement(ELEMENT e) {
    
       // Do nothing if the queue is full
       int nFreeSlot = GetFreeSlot();
       if (nFreeSlot == -1)
          return;
    
       // Copy the content of the element
       m_pElements[nFreeSlot].m_element = e;
    
       // Mark the element with the new stamp
       m_pElements[nFreeSlot].m_nStamp = ++m_nCurrentStamp;
    }
    


    我的问题是  结构体不是不可以用“=”直接赋值的吗?
    2010年2月5日 6:51

全部回复

  • 现在很多编译器都支持这个特性了:
    http://nathanxu.blog.51cto.com/50836/56645

    呵呵。


    谭浩强的书太老了……
    2010年2月5日 7:39
    版主
  • 谢谢你的回复!

    对于类 ,应该也是可以直接赋值的了~
    2010年2月5日 7:59
  • 现在很多编译器都支持这个特性了:
    http://nathanxu.blog.51cto.com/50836/56645

    呵呵。


    谭浩强的书太老了……

    那这是编译器的特性,还是C++新的标准?
    2010年2月6日 2:07
  • C++结构默认的重载operator=。这个特性很久就有了,只不过由于可能会导致指针挂起的错误,不推荐使用。

    0xBAADF00D
    2010年2月6日 11:42
    版主
  • C++特性,struct和class没有很大差别。两者默认实现构造函数,析构函数,赋值运算符,拷贝构造函数的“功能”。这里的功能,表示不一定会创建以上默认的函数,要看类是否具备bitwise语意。如有兴趣可看《C++对象模型》前4章。
    麻烦把正确答案设为解答。
    2010年2月9日 1:28
    版主