s**9 发帖数: 207 | 1 一个类用于多个函数库. 现在对这个类做如下修改:
增加constructor
增加数据成员
将destructor改为virtual
给一个函数增加一个带缺省值的参数
问哪些情况下需要recompile所有的库来确保一个应用能正确地build?
哪些书会讲到这种问题? C++? design pattern? | x****u 发帖数: 44466 | 2 当然需要!
【在 s**9 的大作中提到】 : 一个类用于多个函数库. 现在对这个类做如下修改: : 增加constructor : 增加数据成员 : 将destructor改为virtual : 给一个函数增加一个带缺省值的参数 : 问哪些情况下需要recompile所有的库来确保一个应用能正确地build? : 哪些书会讲到这种问题? C++? design pattern?
| t****t 发帖数: 6806 | 3 人家问你要吃饭还是吃面,你说当然要
怎么跟我女儿似的
【在 x****u 的大作中提到】 : 当然需要!
| s**9 发帖数: 207 | 4 答案是都要, 要解释为什么.
就是觉得题很怪,不知道是不是自己漏了哪一块的知识.
【在 x****u 的大作中提到】 : 当然需要!
| t****t 发帖数: 6806 | 5 这是个老题了
其实增加一个constructor, 如果和旧的不冲突, 是有可能不需要重编译的
另外几个确实都需要
这个问题实际上的问的是C++类代码的interface和implementation
增加一个数据成员相当于改变了sizeof
把dtor改成virtual相当于改变了delete的调用方式
增加一个有缺省值的参数把成员的signature改了(缺省值不是signature的一部分)
但是增加一个普通的ctor, 如果没有代替系统产生的缺省ctor, 那相当于增加一个非
virtual的普通成员(ctor不可能是virtual), 这个可以不用recompile. 如果代替了,
那就是改动了.
【在 s**9 的大作中提到】 : 答案是都要, 要解释为什么. : 就是觉得题很怪,不知道是不是自己漏了哪一块的知识.
| s**9 发帖数: 207 | 6
但是用户提供了ctor, 系统就不再产生缺省ctor了吧?
【在 t****t 的大作中提到】 : 这是个老题了 : 其实增加一个constructor, 如果和旧的不冲突, 是有可能不需要重编译的 : 另外几个确实都需要 : 这个问题实际上的问的是C++类代码的interface和implementation : 增加一个数据成员相当于改变了sizeof : 把dtor改成virtual相当于改变了delete的调用方式 : 增加一个有缺省值的参数把成员的signature改了(缺省值不是signature的一部分) : 但是增加一个普通的ctor, 如果没有代替系统产生的缺省ctor, 那相当于增加一个非 : virtual的普通成员(ctor不可能是virtual), 这个可以不用recompile. 如果代替了, : 那就是改动了.
| t****t 发帖数: 6806 | 7 这个问题的前提是, 你recompile你的程序, 而不是修改你的程序再recompile
如果你能recompile, 那说明你的程序里没有使用缺省的ctor.
如果你需要修改程序, 那无论如何你都需要recompile, 这个我认为不在讨论范围内了.
【在 s**9 的大作中提到】 : : 但是用户提供了ctor, 系统就不再产生缺省ctor了吧?
| l***i 发帖数: 1309 | 8 Lippman's Inside C++ object model.
1. add constructor. no need.
2. add data, yes, since object layout changed.
3. destructor virtual, yes but not sure.
4. add a param with default value, no but not sure.
【在 s**9 的大作中提到】 : 一个类用于多个函数库. 现在对这个类做如下修改: : 增加constructor : 增加数据成员 : 将destructor改为virtual : 给一个函数增加一个带缺省值的参数 : 问哪些情况下需要recompile所有的库来确保一个应用能正确地build? : 哪些书会讲到这种问题? C++? design pattern?
| s**9 发帖数: 207 | 9 我这么理解对不对。用个具体的例子来说:
Setting: C.h define a class C. C.c implements C. main.c includes C.h and
creates instances of C.
Question: If some changes are made to C.h. does recompiling main.c generate
a new main.o file?
如果这道题问的就是上面的情况,那么add data, change dtor to virtual会改变main
.o (所以需要recompile main.c). add a parameter with default value 也会改变
main.o (所以也需要recompile main.c). 这和上面thrust给的答案一致,但和lanti的
不一致?
add a constructor。有的情况main.c 不编译,有的时候编译但main.o会变,有的编译
且main.o不变。所以是否要recompile main.c 不定。
刚在精华区看到了这道题
【在 l***i 的大作中提到】 : Lippman's Inside C++ object model. : 1. add constructor. no need. : 2. add data, yes, since object layout changed. : 3. destructor virtual, yes but not sure. : 4. add a param with default value, no but not sure.
|
|