《C++标准程序库》学习笔记1--第二章&第三章
————————— 第二章 —————————
1.(P11)
C++规定:除了以typename修饰外,template内的任何标志符号都被视为一个值(value)而非一个型别。
eg.
class MyClass{
typename T::SubType *ptr;
};
这里typename指出SubType是class T中定义的一个型别,因此ptr是一个指向T::SubType的指针,否则SubType会被当作一个static成员,于是:
T::SubType *ptr被认为是SubType与ptr的乘积。
2.(P12)
template class 的 member template问题:
下面例子,即使两个型别之间可以自动转换,如int和double,如果我们对assign()使用不同的template型别,也会出错。
class MyClass{
private:
T value;
public:
void assign(cosnt MyClass<T>& x)
{
// x must have same type as *this
value = x.value;
}
...
};
再看这个:
class MyClass{
private:
T value;
public:
template <class X> // member template
void assign(cosnt MyClass<X>& x)
{
// allows different template types
value = x.getValue();
}
T getValue() const{
return value;
}
...
};
现在,assign()的参数x和*this的型别并不相同,所以两个类也就不同,
不能再直接存取MyClass<>的private成员和 protected成员,取而代之,
此例中使用了getValue()
3.(P14)
对基本型别的显示初始化
如果采用不含参数、明确的constructor调用语法,基本型别会被初始为零
eg.
int i2 = int(); // initialized with zero
4.(P16)
异常问题。
①.异常处理不是错误处理
②. void f() throw(xxx) 是f()抛出XXX类型的异常,
而void f() throw() 是指f()不抛出任何异常,这里好多人容易弄错。
5.(P16)
命名空间。
eg.
class A;
class B;
...
}
...
则using tankywoo::A会使A成为当前作用域内代表tankywoo::A的同义字
而using namespace tankywoo会使namespace内的所有名字曝光(A和B)。
————————— 第三章 —————————
6.(P23)
命名空间
上一篇也讲过。
使用C++标准程序库的任何标识符时,有三种选择:(以下都以cout为例)
①直接指定标识符:
②使用using declaration,可使我们不再需要加上”std::”
cout << "Tanky Woo" << std::endl;
③使用using directive,那么std内定义的所有标识符都有效。
cout << "Tanky Woo" << endl;
7.错误处理和异常处理
异常处理这块接触的少,而且第三章这里也是简略的讲到,所以这里先放着,有经验了再补。
8.配置器(Allocators)
同上。
posted on 2011-01-23 18:44 Tanky Woo 阅读(2458) 评论(4) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述