我正在浏览C ++书籍时使用向量。我一直在使用" Vector"用大写' v'意外地。我刚刚在书中注意到他们使用的是小写' v'。我已将一堆测试程序改为使用" vector"相反,除了我的IDE中的颜色变化,我还没有辨别出差异。作为旁注,我使用名为" std_lib_facilities.h"的自定义头文件。这是我从中获取定义的地方。
我得到的描述如下
矢量
//Disgusting macro hack to get a range checked vector:
#define vector Vector
矢量
//Trivially range-checked vector (no iterator checking)
template< class T> struct Vector : public std::vector<T>
{ Whole bunch of code }
我的第一个猜测是我正在使用的头文件碰巧创建了自己的类名为&#34; Vector&#34;类型&#34; vector&#34;,执行看起来像某种错误处理(我不知道如何理解这个头文件的大部分)。我的第二个猜测是&#34; Vector&#34;是&#34; vector&#34;的修订版本,它的可能&#34; Vector&#34;来自STL和&#34;矢量&#34;来自旧学校C.我觉得有趣的事情似乎并不重要。有什么想法吗?
P.S。标题由Bjarne Stroustrup提供,作为他的编程原则和实践第二版的一部分。
答案 0 :(得分:2)
在阅读答案之前,请先考虑标题评论中给出的建议:
学生:请不要尝试了解标题的详细信息。 一切都将被解释。此标题主要用于您没有 一次性理解每个概念。
template< class T> struct Vector : public std::vector<T>
Vector
是作者在该标题中定义的类模板。模板的实例(例如Vector<int>
)将是继承自类std::vector<int>
的类,其中std::vector
是标准库中定义的类模板。
//Disgusting macro hack to get a range checked vector: #define vector Vector
vector
是一个预处理器宏。预处理器将用vector
替换文本Vector
的任何出现,这样如果你要写:
vector my_vector_object;
编译器会看到:
Vector my_vector_object;
宏也是一个恶心的黑客,正如作者所记录的那样。
“vector”和“Vector”之间的区别
我觉得有趣的是,我使用哪一个似乎并不重要。
在宏定义之后,写vector
或Vector
之间没有区别,因为宏将替换另一个,这样编译器在任何一种情况下都会看到Vector
。