百思不得其解,const和&之间的关系
我自己重写了一个简单的程序,实现string的简单功能,程序如下:
//String.h
#include <iostream>
using namespace std;
class String;
ostream& operator << (ostream&, const String &);
class String
{
public:
String(){_size = 0; _string = 0;}
String(char* );
~String(){if(!_string) delete[] _string;}
int size(){return _size;}
char operator[](int);
private:
int _size;
char *_string;
};
//String.cpp
#include <iostream>
#include <cstring>
#include <cassert>
#include "String.h"
using namespace std;
String::String(char *str)
{
_size = strlen(str);
char temp[_size + 1];
_string = temp;
for(int index = 0; index <= _size;index++)
_string[index] = str[index];
}
char String::operator [] (int index)
{
assert(index >= 0 && index <= _size);
return _string[index];
}
ostream& operator << (ostream &out, const String &str)
{
for(int index = 0; index <= str.size(); index++)
cout<<str[index];
return out;
}
用g++编译String.cpp:g++ -c String.cpp得到如下的报错:
String.cpp: In function ‘std::ostream& operator<<(std::ostream&, const String&)’:
String.cpp:25: error: passing ‘const String’ as ‘this’ argument of ‘int String::size()’ discards qualifiers
String.cpp:26: error: passing ‘const String’ as ‘this’ argument of ‘char String::operator[](iex)
这一定是const和&连用导致的错误,本人一直搞不清楚const和&(或*)连用应该注意些什么,希望大家指点迷津,在下不胜感激。
还有cout是iostream的一个实例,请问cout是否为const,如果不是,那么是否可以这么认为:const ostream& operator << (const ostream &out, const String &str)是行不通的,但其中的原因我也是一知半解!