C++ Builder和Visual C++的简单比较,CB vs VC

ooolinux 2019-06-25 06:41:30
其实CB或者VC,不外乎是IDE+编译器+类库(一个是VCL,一个是MFC)。

IDE没什么好说的,VC的代码编辑器好用一点,主要是代码提示,不过CB的IDE支持RAD界面设计,是VC没法比的。

编译器的话,CB的编译器支持一些C++扩展的语法,比如属性__property等,这个有博客介绍的。

类库的话,我的理解,就是包装了Win32 API,以及对Windows消息的封装机制。这一方面,VCL领先MFC不止一代,可以参考李维的《Inside深入核心VCL架构剖析》,所以,使用VCL类库编写程序,用户代码非常简洁,好比说,属下(类库)办事给力,经理(程序员)就当得轻松。
MFC的类库,很多方法和原始的Win32 API函数大同小异,只是没用的函数参数少了一些,而不是一大堆(0,0,0,NULL,NULL),属于浅包装。而对消息的封装机制使用宏定义的方式进行消息映射,相当落后,也导致了MFC程序的可读性较差,广受诟病。
...全文
482 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2019-06-26
  • 打赏
  • 举报
回复
引用 5 楼 draculamx 的回复:
当你接触到一些对性能有硬性要求的项目你就知道了 比如采集,现在电脑上有一个高速采集卡,采集模拟信号(或者数字信号),要求你必须每秒钟采集多少次,并且不能有遗漏,采集的同时,你还要处理数据(存数据库,显示波形等等),这时候,你的代码不但要稳定,还要快速。 这种项目,我不可能去选择C#,也许去买个I7高频CPU,上高频内存,上牛逼的显卡,可以解决,又或者在写C#的时候,进行特定的优化(对于会使用VC的人来说,这无异于脱了裤子打屁)但是做项目是要考虑成本的,如果你用VC写,可以只用奔腾的CPU就够了,那你是绝对不会去选择高配电脑的。。特别是这个项目是你自己做的时候,公司出钱买好电脑那是另外一说。 上面那个情形只是打个比方,工业现场,要求实时性高的项目多了去了,不可能一一列举,还有对速度要求更严苛的,那时候只能上单片机了,只有实时操作系统才能满足需求。 动车知道不,现在有个线阵相机,一次只能拍摄2*2048像素的图片,动车从相机面前过,要求相机拍摄图片,然后把他们组合起来,最终得到完整动车的图片,时速30公里的时候C#可以做,时速200的时候呢?我见过一个人在时速30的时候,用C#写了这个程序,对工控机的要求是:i7 四核,16G内存。。。我就纳闷了。。他们公司是钱多烧的慌,不过话说回来,一般这种项目的金额,和这个工控机比起来,这工控机的价格几乎忽略不计 我想说的就是,不同的项目需求,造成了我们对IDE不同的要求。
这么严苛没有裕量,可能要从算法上革新,或者你说的换解决方案了(单片机,实时系统)。
draculamx 2019-06-26
  • 打赏
  • 举报
回复
引用 4 楼 ooolinux 的回复:
[quote=引用 2 楼 draculamx 的回复:]
[quote=引用 1 楼 zhgwbzhd 的回复:]
编译工具就是一个工具。不同的工具各有所长,也各有所短。
使用他的优点做适合的项目就好了。
我觉得最最重要的是,编程过程中,项目的构思,算法很重要,最后成为一个稳定的、快速的、客户满意的产品即可。


各有所长,各有所短,这是没有疑问的,关键是要了解他们的长短。。。

我现在就是不知道当前的CB最新版本和VC的2019相比,编译出的exe,在运行速度上差多少?编译速度我不太关心,因为我做的项目还没有达到那种规模,编译速度慢点对我也没什么影响。。



[/quote]

为什么那么在乎性能呢?很多.net的都能用。
都是C++,业务逻辑代码速度差别应该不大吧?[/quote]

当你接触到一些对性能有硬性要求的项目你就知道了
比如采集,现在电脑上有一个高速采集卡,采集模拟信号(或者数字信号),要求你必须每秒钟采集多少次,并且不能有遗漏,采集的同时,你还要处理数据(存数据库,显示波形等等),这时候,你的代码不但要稳定,还要快速。

这种项目,我不可能去选择C#,也许去买个I7高频CPU,上高频内存,上牛逼的显卡,可以解决,又或者在写C#的时候,进行特定的优化(对于会使用VC的人来说,这无异于脱了裤子打屁)但是做项目是要考虑成本的,如果你用VC写,可以只用奔腾的CPU就够了,那你是绝对不会去选择高配电脑的。。特别是这个项目是你自己做的时候,公司出钱买好电脑那是另外一说。

上面那个情形只是打个比方,工业现场,要求实时性高的项目多了去了,不可能一一列举,还有对速度要求更严苛的,那时候只能上单片机了,只有实时操作系统才能满足需求。

动车知道不,现在有个线阵相机,一次只能拍摄2*2048像素的图片,动车从相机面前过,要求相机拍摄图片,然后把他们组合起来,最终得到完整动车的图片,时速30公里的时候C#可以做,时速200的时候呢?我见过一个人在时速30的时候,用C#写了这个程序,对工控机的要求是:i7 四核,16G内存。。。我就纳闷了。。他们公司是钱多烧的慌,不过话说回来,一般这种项目的金额,和这个工控机比起来,这工控机的价格几乎忽略不计

我想说的就是,不同的项目需求,造成了我们对IDE不同的要求。
ooolinux 2019-06-26
  • 打赏
  • 举报
回复
引用 2 楼 draculamx 的回复:
[quote=引用 1 楼 zhgwbzhd 的回复:] 编译工具就是一个工具。不同的工具各有所长,也各有所短。 使用他的优点做适合的项目就好了。 我觉得最最重要的是,编程过程中,项目的构思,算法很重要,最后成为一个稳定的、快速的、客户满意的产品即可。
各有所长,各有所短,这是没有疑问的,关键是要了解他们的长短。。。 我现在就是不知道当前的CB最新版本和VC的2019相比,编译出的exe,在运行速度上差多少?编译速度我不太关心,因为我做的项目还没有达到那种规模,编译速度慢点对我也没什么影响。。 [/quote] 为什么那么在乎性能呢?很多.net的都能用。 都是C++,业务逻辑代码速度差别应该不大吧?
ooolinux 2019-06-26
  • 打赏
  • 举报
回复
引用 1 楼 zhgwbzhd 的回复:
编译工具就是一个工具。不同的工具各有所长,也各有所短。 使用他的优点做适合的项目就好了。 我觉得最最重要的是,编程过程中,项目的构思,算法很重要,最后成为一个稳定的、快速的、客户满意的产品即可。
有道理,各有所用。
draculamx 2019-06-26
  • 打赏
  • 举报
回复
引用 1 楼 zhgwbzhd 的回复:
编译工具就是一个工具。不同的工具各有所长,也各有所短。
使用他的优点做适合的项目就好了。
我觉得最最重要的是,编程过程中,项目的构思,算法很重要,最后成为一个稳定的、快速的、客户满意的产品即可。


各有所长,各有所短,这是没有疑问的,关键是要了解他们的长短。。。

我现在就是不知道当前的CB最新版本和VC的2019相比,编译出的exe,在运行速度上差多少?编译速度我不太关心,因为我做的项目还没有达到那种规模,编译速度慢点对我也没什么影响。。



ooolinux 2019-06-26
  • 打赏
  • 举报
回复
引用 14 楼 早打大打打核战争 的回复:
G++8宣称100%支持C++17


那还是给力。
  • 打赏
  • 举报
回复
G++8宣称100%支持C++17
ooolinux 2019-06-26
  • 打赏
  • 举报
回复
引用 12 楼 早打大打打核战争 的回复:
[quote=引用 11 楼 ooolinux 的回复:]
[quote=引用 10 楼 早打大打打核战争的回复:]科学计算还得用intel C++/Fortran,但是intel C++的标准支持很渣,到现在连C++11支持都不完整

别的编译器有没有完整支持C++11的?如果不是写库,感觉很多用不到。[/quote]

都差不多支持C++17了,CB 10.2,VC++ 2015还是C++11,G++7、clang4、CB 10.3.1(64位),VC++ 2019支持大部分C++17特性

[/quote]

C++11,或C++17,支持100%特性的编译器应该没有。
  • 打赏
  • 举报
回复
引用 11 楼 ooolinux 的回复:
[quote=引用 10 楼 早打大打打核战争的回复:]科学计算还得用intel C++/Fortran,但是intel C++的标准支持很渣,到现在连C++11支持都不完整

别的编译器有没有完整支持C++11的?如果不是写库,感觉很多用不到。[/quote]

都差不多支持C++17了,CB 10.2,VC++ 2015还是C++11,G++7、clang4、CB 10.3.1(64位),VC++ 2019支持大部分C++17特性

ooolinux 2019-06-26
  • 打赏
  • 举报
回复
引用 10 楼 早打大打打核战争的回复:
科学计算还得用intel C++/Fortran,但是intel C++的标准支持很渣,到现在连C++11支持都不完整
别的编译器有没有完整支持C++11的?如果不是写库,感觉很多用不到。
  • 打赏
  • 举报
回复
科学计算还得用intel C++/Fortran,但是intel C++的标准支持很渣,到现在连C++11支持都不完整
ooolinux 2019-06-26
  • 打赏
  • 举报
回复
引用 7 楼 早打大打打核战争的回复:
VC++编译器这些年改动很小,从编译器版本就可以看出来,VS2015中是19.0、VS2017中是19.10~19.16、VS2019中是19.20

VC++编译器的优化水平基本属于中等偏下一点,我用四种C++编译器GCC、CB、VC++、intel C++(均测试64位编译器),编译了linpack浮点性能测试程序,然后在同一台机器(i7-6700k,DDR4-3200)上运行测试程序,以测得的平均双精度浮点运算性能MFLOPS做比较,VC++生成的程序性能是最低的,所用的编译器版本、编译开关、测试结果如下:
gcc 5.1.0
gcc -m64 -O3 -ffast-math -mavx linpack.c -o lpgcc64.exe
2302.90 MFLOPS

bcc64 7.30
bcc64 -O3 -ffast-math linpack.c -o lpbcc64.exe
1913.81 MFLOPS

cl 19.00.24210
cl /Ox /arch:AVX /Qpar linpack.c /link /out:lpcl64.exe
1896.61 MFLOPS

icl 15.0.2.179
icl /O3 /arch:AVX /fast /Qpar linpack.c /link /out:lpicl64.exe
4972.83 MFLOPS
浮点性能intel编译器这么强,其实业务逻辑代码的整体性能差别估计不大。
  • 打赏
  • 举报
回复
这是linpack输出的结果txt(注意它对编译器版本和命令行参数的探测并不准确,以我前面列的为准):
----------------- ----------------- --------- --------- ---------
LINPACK BENCHMARK FOR PCs 'C/C++' n @ 100

Month run 0/0
PC model
CPU
Clock MHz
Cache
Options
OS/DOS
Compiler GNU C++
OptLevel -O2 -o linpack.exe
Run by
From
E-mail

Rolling Unrolled
Precision Double
norm. resid 1.8
resid 7.86037901e-014
machep 2.22044605e-016
x[0]-1 -1.49880108e-014
x[n-1]-1 -1.89848137e-014
matgen 1 seconds 0.00002
matgen 2 seconds 0.00002
Repetitions 15948
Leading dimension 201
dgefa dgesl total Mflops
1 pass seconds 0.00000 0.00000 0.00000
Repeat seconds 0.00029 0.00001 0.00030 2278.75
Repeat seconds 0.00029 0.00001 0.00030 2271.19
Repeat seconds 0.00029 0.00001 0.00030 2278.27
Repeat seconds 0.00029 0.00001 0.00030 2278.27
Repeat seconds 0.00029 0.00001 0.00030 2278.75
Average 2277.05
Leading dimension 200
Repeat seconds 0.00029 0.00001 0.00030 2301.64
Repeat seconds 0.00029 0.00001 0.00030 2301.16
Repeat seconds 0.00029 0.00001 0.00030 2308.92
Repeat seconds 0.00029 0.00001 0.00030 2301.16
Repeat seconds 0.00029 0.00001 0.00030 2301.64
Average 2302.90

----------------- ----------------- --------- --------- ---------
LINPACK BENCHMARK FOR PCs 'C/C++' n @ 100

Month run 0/0
PC model
CPU
Clock MHz
Cache
Options
OS/DOS
Compiler Borland C++
OptLevel -O2 -6
Run by
From
E-mail

Rolling Unrolled
Precision Double
norm. resid 1.7
resid 7.41628980e-14
machep 2.22044605e-16
x[0]-1 -1.49880108e-14
x[n-1]-1 -1.89848137e-14
matgen 1 seconds 0.00002
matgen 2 seconds 0.00002
Repetitions 31409
Leading dimension 201
dgefa dgesl total Mflops
1 pass seconds 0.00000 0.00000 0.00000
Repeat seconds 0.00014 0.00022 0.00036 1915.34
Repeat seconds 0.00014 0.00022 0.00036 1912.79
Repeat seconds 0.00014 0.00022 0.00036 1915.34
Repeat seconds 0.00014 0.00022 0.00036 1915.51
Repeat seconds 0.00014 0.00022 0.00036 1912.62
Average 1914.32
Leading dimension 200
Repeat seconds 0.00014 0.00022 0.00036 1914.45
Repeat seconds 0.00014 0.00022 0.00036 1914.28
Repeat seconds 0.00014 0.00022 0.00036 1914.28
Repeat seconds 0.00014 0.00022 0.00036 1914.28
Repeat seconds 0.00014 0.00022 0.00036 1911.74
Average 1913.81

----------------- ----------------- --------- --------- ---------
LINPACK BENCHMARK FOR PCs 'C/C++' n @ 100

Month run 0/0
PC model
CPU
Clock MHz
Cache
Options
OS/DOS
Compiler Microsoft Visual C++
OptLevel -O2 -fp:precise
Run by
From
E-mail

Rolling Unrolled
Precision Double
norm. resid 1.7
resid 7.41628980e-14
machep 2.22044605e-16
x[0]-1 -1.49880108e-14
x[n-1]-1 -1.89848137e-14
matgen 1 seconds 0.00002
matgen 2 seconds 0.00002
Repetitions 31828
Leading dimension 201
dgefa dgesl total Mflops
1 pass seconds 0.00000 0.00000 0.00000
Repeat seconds 0.00013 0.00023 0.00036 1896.00
Repeat seconds 0.00013 0.00023 0.00036 1896.49
Repeat seconds 0.00013 0.00023 0.00036 1896.82
Repeat seconds 0.00013 0.00023 0.00036 1896.66
Repeat seconds 0.00013 0.00023 0.00036 1896.82
Average 1896.56
Leading dimension 200
Repeat seconds 0.00013 0.00023 0.00036 1896.31
Repeat seconds 0.00013 0.00023 0.00036 1896.64
Repeat seconds 0.00013 0.00023 0.00036 1896.64
Repeat seconds 0.00013 0.00023 0.00036 1896.48
Repeat seconds 0.00013 0.00023 0.00036 1896.97
Average 1896.61

----------------- ----------------- --------- --------- ---------
LINPACK BENCHMARK FOR PCs 'C/C++' n @ 100

Month run 0/0
PC model
CPU
Clock MHz
Cache
Options
OS/DOS
Compiler Microsoft Visual C++
OptLevel -O2 -fp:precise
Run by
From
E-mail

Rolling Unrolled
Precision Double
norm. resid 1.9
resid 8.47100168e-14
machep 2.22044605e-16
x[0]-1 -1.11799459e-13
x[n-1]-1 -9.60342916e-14
matgen 1 seconds 0.00001
matgen 2 seconds 0.00001
Repetitions 33758
Leading dimension 201
dgefa dgesl total Mflops
1 pass seconds 0.00000 0.00000 0.00000
Repeat seconds 0.00014 0.00000 0.00014 4949.16
Repeat seconds 0.00014 0.00000 0.00014 4949.16
Repeat seconds 0.00014 0.00000 0.00014 4950.21
Repeat seconds 0.00014 0.00000 0.00014 4949.16
Repeat seconds 0.00014 0.00000 0.00014 4948.10
Average 4949.16
Leading dimension 200
Repeat seconds 0.00014 0.00000 0.00014 4970.48
Repeat seconds 0.00014 0.00000 0.00014 4973.68
Repeat seconds 0.00014 0.00000 0.00014 4972.62
Repeat seconds 0.00014 0.00000 0.00014 4973.68
Repeat seconds 0.00014 0.00000 0.00014 4973.68
Average 4972.83

  • 打赏
  • 举报
回复
VC++编译器这些年改动很小,从编译器版本就可以看出来,VS2015中是19.0、VS2017中是19.10~19.16、VS2019中是19.20

VC++编译器的优化水平基本属于中等偏下一点,我用四种C++编译器GCC、CB、VC++、intel C++(均测试64位编译器),编译了linpack浮点性能测试程序,然后在同一台机器(i7-6700k,DDR4-3200)上运行测试程序,以测得的平均双精度浮点运算性能MFLOPS做比较,VC++生成的程序性能是最低的,所用的编译器版本、编译开关、测试结果如下:
gcc 5.1.0
gcc -m64 -O3 -ffast-math -mavx linpack.c -o lpgcc64.exe
2302.90 MFLOPS

bcc64 7.30
bcc64 -O3 -ffast-math linpack.c -o lpbcc64.exe
1913.81 MFLOPS

cl 19.00.24210
cl /Ox /arch:AVX /Qpar linpack.c /link /out:lpcl64.exe
1896.61 MFLOPS

icl 15.0.2.179
icl /O3 /arch:AVX /fast /Qpar linpack.c /link /out:lpicl64.exe
4972.83 MFLOPS

zhgwbzhd 2019-06-25
  • 打赏
  • 举报
回复
编译工具就是一个工具。不同的工具各有所长,也各有所短。
使用他的优点做适合的项目就好了。
我觉得最最重要的是,编程过程中,项目的构思,算法很重要,最后成为一个稳定的、快速的、客户满意的产品即可。

551

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧