- 论坛徽章:
- 0
|
本帖最后由 Heartwork 于 2011-12-28 16:13 编辑
回复 82# OwnWaterloo
>> 不好意思,确实是我用词不当。
我从来没抱怨过C++优化不足,C++在效率上有的时候比C走的更远,但是这种代价有点太高了,贴一个C的类似的代码:- #include <stdio.h>
- struct abc {
- int a;
- int b;
- };
- struct abc return_abc(void)
- {
- struct abc temp = {1, 2};
- printf("temp at %p\n", &temp);
- return temp;
- }
- int main(void)
- {
- struct abc temp = return_abc();
- printf("temp at %p\n", &temp);
- printf("a = %d, b = %d\n", temp.a, temp.b);
- return 0;
- }
复制代码 执行结果:
$ ./test.exe
temp at 0x22cd20
temp at 0x22cd4c
a = 1, b = 2
C也是复制了一份副本的。关键是C++的那种结果是未设置任何优化选项的!
>> 以我的水平,对于多继承和模板我肯定拿不出更好的方案。但是我觉得一个负责任的编程语言应该保证它给程序员的接口是一个黑盒,不要出了问题就看Inside the C++ Object Model一类的书找原因。
比如多继承,应该在出现菱形继承时由编译器来去掉多余的子对象,而不是修改基类的定义。这个编译期应该可以做到,但有可能会增加编译时间。
模板导致的代码膨胀:没什么好的想法。
模板的调试(模板参数检查),主要是语言层面缺少对于concept的支持(sgi STL只是利用了一些宏来做检查),所以不能给出很准确的出错信息。
>> 就是说你可以将const char *类型的字符串传给一个只接受char *类型的函数,不会在编译时报错,但运行时coredump。
现在的g++已经解决了这个问题(将字符串字面值付给非常量指针时会有警告,将const char*传给char*类型函数会报错)。 |
|