z****e 发帖数: 2024 | 1 我不是很熟template这块,有个问题是关于编译的,
如果template放到一个头文件,然后很多cpp include,是没事的。
这个编译的时候是怎么回事?
STL不就这样么?每一个cpp都include一模一样的完整头文件。也没事啊。怎么回事? |
X****r 发帖数: 3557 | 2 你说说为什么会有事?
有时候好像你研究得很深的样子,有时候很基础的东西都不明白,
所以我说你去做程序员可惜了。
【在 z****e 的大作中提到】 : 我不是很熟template这块,有个问题是关于编译的, : 如果template放到一个头文件,然后很多cpp include,是没事的。 : 这个编译的时候是怎么回事? : STL不就这样么?每一个cpp都include一模一样的完整头文件。也没事啊。怎么回事?
|
z****e 发帖数: 2024 | 3 我就是不行啊,没经验,没工作,一穷二白。
基本的也不清楚了。
template不也重复定义了吗?如果在很多cpp里边include的话,难道不算重复定义?
【在 X****r 的大作中提到】 : 你说说为什么会有事? : 有时候好像你研究得很深的样子,有时候很基础的东西都不明白, : 所以我说你去做程序员可惜了。
|
X****r 发帖数: 3557 | 4 好,那我问你,先不说template,就是一个普通的class,它在头文件里定义的,
被很多cpp包含,算不算重复定义?
【在 z****e 的大作中提到】 : 我就是不行啊,没经验,没工作,一穷二白。 : 基本的也不清楚了。 : template不也重复定义了吗?如果在很多cpp里边include的话,难道不算重复定义?
|
z****e 发帖数: 2024 | 5 不算啊,那些是类型,又不是对象。
【在 X****r 的大作中提到】 : 好,那我问你,先不说template,就是一个普通的class,它在头文件里定义的, : 被很多cpp包含,算不算重复定义?
|
z****e 发帖数: 2024 | 6 但是如果class的成员函数,就要放在cpp里边。
【在 X****r 的大作中提到】 : 好,那我问你,先不说template,就是一个普通的class,它在头文件里定义的, : 被很多cpp包含,算不算重复定义?
|
X****r 发帖数: 3557 | 7 是啊,你已经基本上回答了你自己的问题。那是模板,又不是对象。
【在 z****e 的大作中提到】 : 不算啊,那些是类型,又不是对象。
|
z****e 发帖数: 2024 | 8 是啊,突然明白了,红猪侠醍醐灌顶。
编译器当时不需要分配内存,分配地址,所以没有重复定义。
但是分配地址的时候,就是定义了。
【在 X****r 的大作中提到】 : 是啊,你已经基本上回答了你自己的问题。那是模板,又不是对象。
|
X****r 发帖数: 3557 | 9 是吗?那么对于以下的写法,A::getX也会有重复定义的问题吗?
class A {
public:
int getX() { return x; }
private:
int x;
};
【在 z****e 的大作中提到】 : 但是如果class的成员函数,就要放在cpp里边。
|
z****e 发帖数: 2024 | 10 你这个是inline的,所以没事。
但是拿到外边,不加inline keyword定义的话,就要放到cpp了。
【在 X****r 的大作中提到】 : 是吗?那么对于以下的写法,A::getX也会有重复定义的问题吗? : class A { : public: : int getX() { return x; } : private: : int x; : };
|
|
|
X****r 发帖数: 3557 | 11 从C++语言的角度讲,one definition rule有两个主要方面:
一是在同一个translation unit里面,几乎所有东西都最多只能定义一次。
二是在同一个程序里,几乎所有被用到的对象和非inline的函数必须定义恰好一次。
两条都有一些例外,比如就class template来说,它的静态数据成员可以不符合二。
【在 z****e 的大作中提到】 : 是啊,突然明白了,红猪侠醍醐灌顶。 : 编译器当时不需要分配内存,分配地址,所以没有重复定义。 : 但是分配地址的时候,就是定义了。
|
z****e 发帖数: 2024 | 12 恩。这个应付面试应该足够了。
【在 X****r 的大作中提到】 : 从C++语言的角度讲,one definition rule有两个主要方面: : 一是在同一个translation unit里面,几乎所有东西都最多只能定义一次。 : 二是在同一个程序里,几乎所有被用到的对象和非inline的函数必须定义恰好一次。 : 两条都有一些例外,比如就class template来说,它的静态数据成员可以不符合二。
|
N***m 发帖数: 4460 | 13 你们简直不是人!!!
这么复杂的东西是用来应付面世的?
【在 z****e 的大作中提到】 : 恩。这个应付面试应该足够了。
|
t****t 发帖数: 6806 | 14 自己没写过要背出来, 当然觉得复杂了
自己写过的话, 自然而然就记住了
所以这种面试其实就是看你写过多少东西, 而且这个绝对假装不来的
【在 N***m 的大作中提到】 : 你们简直不是人!!! : 这么复杂的东西是用来应付面世的?
|
P********e 发帖数: 2610 | 15 这个牛
inline在编译的时候是方到什么地方?如果可重复定义的。
【在 X****r 的大作中提到】 : 从C++语言的角度讲,one definition rule有两个主要方面: : 一是在同一个translation unit里面,几乎所有东西都最多只能定义一次。 : 二是在同一个程序里,几乎所有被用到的对象和非inline的函数必须定义恰好一次。 : 两条都有一些例外,比如就class template来说,它的静态数据成员可以不符合二。
|
z****e 发帖数: 2024 | 16 cpp
【在 P********e 的大作中提到】 : 这个牛 : inline在编译的时候是方到什么地方?如果可重复定义的。
|
P********e 发帖数: 2610 | 17 我说编译的时候和其他函数放的地方不一样吗?
还是变异的时候不编译inline
【在 z****e 的大作中提到】 : cpp
|
N***m 发帖数: 4460 | 18 外事不觉问google阿。
有那么多东西要学,自己写code太麻烦了。
【在 t****t 的大作中提到】 : 自己没写过要背出来, 当然觉得复杂了 : 自己写过的话, 自然而然就记住了 : 所以这种面试其实就是看你写过多少东西, 而且这个绝对假装不来的
|
S**I 发帖数: 15689 | 19 inline只是一个suggestion,是否采纳取决于编译器。
【在 P********e 的大作中提到】 : 我说编译的时候和其他函数放的地方不一样吗? : 还是变异的时候不编译inline
|
z****e 发帖数: 2024 | 20 inline只是一个申请,具体要看编译器了。可能:
1.inline直接展开。
2.普通函数。
【在 P********e 的大作中提到】 : 我说编译的时候和其他函数放的地方不一样吗? : 还是变异的时候不编译inline
|
t****t 发帖数: 6806 | 21 人家雇你不就是为了写code吗? 你嫌写code麻烦, 不要找写code的工作好了.
有那么多东西要学? 你想错了, 找工作不需要什么都会. 什么都会的半吊子远远不如专
精一门的.
【在 N***m 的大作中提到】 : 外事不觉问google阿。 : 有那么多东西要学,自己写code太麻烦了。
|