Skip to content

Latest commit

 

History

History
175 lines (130 loc) · 3.14 KB

README.md

File metadata and controls

175 lines (130 loc) · 3.14 KB

《C++ 程序设计语言*第四版》 中文勘误


  • P122:把补码改成反码

译文:一个8位的字节所能容纳的256个值既可以被看成0255,也能被看成-127127。注意:不是像你想象的-128~127。因为C++标准支持使用补码的硬件设备,而补码会排除掉一个值,所以如果我们使用-128的话代码就不容易移植了。

原文:the C++ standard leaves open the possibility of one's complement (反码)hardware and that eliminates one value; thus, a use of –128 is nonportable.


  • P123:代码错误
// 译文
singed char sc = -160
//原文
singed char sc = -140
P166:Map类函数声明形参错误
template <class K,class V>
class Map{
	public:
		V& operator[](const K& k);//返回与键值k对应的值
}

  • P180:函数错误
ostream& operator<<(ostream& os, Point p)
{
	 //中文翻译版错误如下
	 //return os << '{' << p[i].x << ',' << p[i].y << '}';
	 //英文原文是正确的
	 return os << '{' << p.x << ',' << p.y << '}';
}

  • P217:变量名字错误
default:
	if (isalpha(ch)) {
		//string_value = ch; 错误的版本
		ct.string_value = ch;//正确的版本
		while (ip->get(ch) && isalnum(ch))
			ct.string_value += ch;
		ip->putback(ch);
		return ct = {Kind::name};
	}

  • P223:多打了一个加号

译文(错误):a++++1 的意思是 (a++)+1

原文:a+++1 means (a ++) + 1


  • P310:struct类不完整
template<typename F>
struct Final_action {
      Final_action(F f): clean{f} {}
      ~Final_action() { clean(); }
      F clean;
      Final_action(const Final_action&) =delete;       // not meant to be copied (§3.3.4, §17.6.4)
      Final_action& operator=(const Final_action&) =delete;
};

  • P340:函数调用中参数太少
namespace Parser {
	double expr(bool);
	double term(bool);
	double prim(bool);
}

double val = Parser::expr(true);

double Parser::expr(bool b)
{
	//...
}
  • P343:缺少分号
namespace N {
	struct S { int i; };
	void g(S);
	void f(S);
	void h(int);
}
  • P367:头文件中不该包含以下内容,无名名字空间代码错误
内容 代码
无名名字空间 namespace{/**/}

  • P373:dc.h中漏了using namespace std;
  • P373:dc.hToken_stream的构造函数、析构函数名错误

  • P404:函数参数类型错误
//void char_rep(char s[],in max) const;//错误
void char_rep(char s[],int max) const;

  • P419:声明类型错误+指针使用错误
class Nonlocal{
public:
	void destroy(){this->~Nonlocal();}

private:
	~Nonlocal(){};
};

void user()
{
	//...
	//X* p = new Nonlocal; //错误的译文
	Nonlocal *p = new Nonlocal;//正确的原文
	//...
	//p.destory();//错误
	p->destory();//正确
}

  • P437:拷贝构造函数缺少参数名
class X{
	string s;
	string s2;
	vector<int> v;
	
	//译文漏掉了参数a
	X(const X& a):s{a.s},v{a.v}{}
	//...
}

  • P441:变量名搞混

译文:为tmp赋值后,我们就有了b的值的两个副本

原文:After assigning to a, we have two copies of b’s value.