关于赋值操作符的重载: 这个程序为什么能在g++上编译通过?

原创 2006年06月21日 11:17:00

// 一般认为gcc是学习C/C++的最佳编译器。可是下面这个程序在g++3.4.4上竟然可以编译通过。

#include <vector>
#include <iostream>
using namespace std;

class val_box
{
private:
    int val;
public:
    int get()
    {
        return val;
    }
    void set(int new_val)
    {
        val = new_val;
    }    
    val_box& operator= (val_box& right)   //  实际上, const 是必需的
    {   // 赋值操作符的重载
        val = right.val;
        return *this;
    } 
};

class query
{
private:
    vector<val_box> val_box_collection;
public:
    void Insert(int val)
    {
        val_box temp_val_box;
        temp_val_box.set(val);
        val_box_collection.push_back(temp_val_box);
    }
    friend ostream& operator<< (ostream& os, query& right)
    {
        for(vector<val_box>::iterator iter = right.val_box_collection.begin();
            iter != right.val_box_collection.end(); ++iter)
        {
            os << (*iter).get() << "/t";
        }       
        return os;
    }
};


int main()
{
    query test_class;
    test_class.Insert(1);
    test_class.Insert(2);
    test_class.Insert(3);
    cout << test_class << endl;
    cin.get();
    return 0;
}


/*
vc2005的错误描述:
Error 1 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const val_box' (or there is no acceptable conversion) 

Digital Mars 的错误描述:
C:/dm/bin/../stlport/stlport/stl/_algobase.h(327) : Error: need explicit cast for function parameter 1 to get
from: const val_box*
to  : val_box*
C:/dm/bin/../stlport/stlport/stl/_algobase.h(139) : Error: need explicit cast for function parameter 1 to get
from: const val_box*
to  : val_box*
C:/dm/bin/../stlport/stlport/stl/_algobase.h(335) : Error: need explicit cast for function parameter 1 to get
from: const val_box*
to  : val_box*
main.cpp:
--- errorlevel 1
*/


C++复制构造函数与重载赋值操作符

http://www.cnblogs.com/BlueTzar/articles/1223313.html 复制构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一...
  • qq_30230091
  • qq_30230091
  • 2015年07月30日 16:21
  • 1116

C++运算符重载(友元函数方式)

我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数。 当重载友元函数时,将没有隐含的参数this指针。这样,对双目运算符,友元...
  • GarfieldEr007
  • GarfieldEr007
  • 2015年07月10日 11:27
  • 1553

赋值运算符重载函数 返回引用和返回对象的区别

赋值重载符的定义 返回引用和返回对象的区别#include "stdafx.h" #include using namespace std;class CStudent { public: C...
  • miyunhong
  • miyunhong
  • 2016年04月14日 10:19
  • 1359

【程序语言】C++ 构造函数 拷贝构造函数 =操作符重载 析构函数 详细分析

当你满怀轻松得心情写下一个简单的C++类:class MyClass { private: int a; } 你心里也许十分高兴,因为你恐怕找不到更简单的类了,写简单的东西总是轻松越快...
  • theprinceofelf
  • theprinceofelf
  • 2011年07月27日 10:24
  • 1067

QTcreator能在windows中交叉编译arm平台程序吗?

QTcreator能在windows中交叉编译arm平台程序吗? [问题点数:40分,结帖人XChuda] XChuda 该用户很懒,没设置昵称 等级: 结帖率:100% 楼主 发表...
  • autumn20080101
  • autumn20080101
  • 2012年11月21日 10:39
  • 815

如何编译能在android上运行的C程序

转自:http://blog.csdn.net/zlcchina/article/details/12974257 Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层...
  • LvL_wxfg
  • LvL_wxfg
  • 2014年02月21日 19:03
  • 664

交叉编译能在arm平台上运行的Qt应用程序的步骤

我们的电脑一般来说,现在主流的还是X86平台(当然,随着64位机的普及,相信以后格局会变化,暂不讨论)。对于Qt应用程序来说,我们在PC机上开发的时候,因为本身我们的开发软件Qt creator是运行...
  • u013000434
  • u013000434
  • 2013年11月30日 22:26
  • 4350

如何让ubuntu12.04(64 bit)下面编译的程序能在10.04下成功运行

大概可以按照以下步骤进行: 1. 分析那些函数用的是10.04下没有的glibc的版本 通常12.04下编译的程序在10.04下运行报glibc2.14没找到的错误,这里就要找出那个函数用...
  • RomanBrickie
  • RomanBrickie
  • 2013年01月25日 19:06
  • 1126

Qt学习(如何交叉编译一个Qt程序使其能在板子上运行)

如何交叉编译一个Qt程序使其能在板子上运行      首先安装交叉编译器arm-linux-gcc3.4.6,先将其压缩包放到一个目录下,然后对其进行解压,举了解压命令为:tar xjvf arm-l...
  • zhangshan415
  • zhangshan415
  • 2011年07月09日 19:11
  • 4820

批注:C++中复制构造函数与重载赋值操作符总结:默认浅拷贝,带指针的需要深拷贝

notes:这两个函数默认浅拷贝,带指针的需要深拷贝.需要重写这两个函数 前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 复制构造函数和重载赋值操作符的定义;复...
  • fdsafwagdagadg6576
  • fdsafwagdagadg6576
  • 2016年06月20日 22:38
  • 423
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于赋值操作符的重载: 这个程序为什么能在g++上编译通过?
举报原因:
原因补充:

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