- 主题:3202年了,c++项目用哪个标准比较好
11, 17是主版本的,14, 20是升级完善版,论坑,还是17多一些
20不碰coroutine没什么坑
【 在 leslin 的大作中提到: 】
: 98/03太考古,即使不用模板,没有auto, lambda 也不太舒服,肯定不用了
: 20 比较新,工具支持还不完美,这个坑最好还是不踩
: 那比较保守的11/14 和改动比较大的 17 之间,选择哪个好呢?
: ...................
--
FROM 115.193.172.*
不写模板和高性能计算,20的确用处不大
一旦涉及高性能计算,必须constexpr, 必须literal,必须[[likely]], [[unlikely]], 必须能compile time的就compile time,必须std::variant来代替基类指针, 必须varidic template, 写trait必须folding expression,另外23里加了flat_map和flat_hash_map也是必用。
简直不能更多
【 在 hgoldfish 的大作中提到: 】
: c++11 吧。新的标准也没啥用。
:
--
修改:ziqin FROM 115.193.172.*
FROM 115.193.172.*
讲真,module似乎没什么大用,除了编译快一些,发布的时候又不能发布module
【 在 leslin 的大作中提到: 】
:
: 20的module都实现好了?可以放心用?
--
FROM 115.193.172.*
因为本来就是两种语言,应该说模板语言才是现代c++的精髓
如果说继承和虚函数是所谓经典c++,那只能说已经几乎被时代淘汰了。因为这两个东西本来c就可以做,外加现在各种其他语言,如果仅仅从编写业务逻辑上来说经典C++没有任何优势
现代C++的精髓是,把逻辑层和硬件层结合,给编译器更精确的指示编译出效率更高的机器代码,所以能在编译时做的都在编译时做,能内存连续尽量内存连续, 能在stack上的尽量在stack上
【 在 hgoldfish 的大作中提到: 】
: 只要不用模板,几乎都没有用。
: c++ 用模板以后编译速度特别慢,占用内存巨大。而且模板语言是游离于经典 c++ 之外的另一套语言,怎么看怎么别扭。
:
--
FROM 115.193.172.*
但是,module好像比库更加版本细化,反正不同组之间协同工作,用module经常会类似版本不匹配之类
【 在 leslin 的大作中提到: 】
:
: 编译快就是很大的福利啊
: 如果将来能够进化到像现代语言那样,不需要头文件和cpp分离
: ...................
--
FROM 115.193.172.*
1. std::visit对于std::variant,比较 virtual function对于virtual base,要少一次函数指针跳转,而且,因为用到std::variant的地方基本都是模板了,所以如果在编译时就能判断std::variant里的类型,std::visit更快
2. 因为不需要统一的virtual base,增加删除新的interface非常方便,耦合度小
3. std::vector,之类的container里不需要再传指针,可以直接在container里连续内存储存
【 在 fanci 的大作中提到: 】
: std::variant 相比于虚基类如何提升了性能?
--
FROM 115.193.172.*
很多地方很难通过手撸的
打个比方
double f(double x) const noexcept
{
return x*x;
}
这个函数,在传统意义上,是一个运行时的东西,因为x是在运行时传入的。
但是,在实际用这个函数的时候,很多时候,如果x是一个hardcode的东西,或者数学常量,比如f(3.1415926), 那实际上,这个就是一个编译时的东西,但是如果没有constexpr这一系列的东西,哪怕用C的宏来代替,还是要多一步运行时的3.1415926*3.1415926的计算
更复杂的,比如
double average(const std::vector<double> a) const noexcept
这个妥妥是个运行时了吧,都是std::vector了,但是,在实际代码里average({1, 2, 3.5, 4}),现在std::vector有一系列的constexpr ctor,那这个函数也变成一个编译时计算了。
所以,现代c++,基本上就是针对编译器的一种语言,能在编译时做了的,都在编译时做
【 在 leslin 的大作中提到: 】
:
: 这些其实都是编译时间和编程时间的交易
: 所谓的高性能计算,其实应用范围很窄,很多地方手撸就可以
: ...................
--
FROM 115.193.172.*
不是所谓的通用性,是数学上的完备性,C++各个版本,virtual和template是两个体系,但是很多东西是一边用一边暴露出来不完备的,所以才在补全。
就学数学的人来说,c++的代码还是比较优雅的,不像其他的语言,很多时候完全看不下去。如果仅仅是写一些业务逻辑,不要踩坑,那直接python,或者定个编码规则,统一写些常用的wrapper, 哪些能用哪些不能用规定清楚就可以了,但是这些是具体项目上的管理的事
【 在 leslin 的大作中提到: 】
:
: 怎么说呢,你举的栗子,就个例来说,手撸都不难
: 求平方的那个,写个宏,常量编译器都是可以正常合并的,没有运行时开销
: ...................
--
FROM 115.193.172.*
自动azure互联网化以后,吸收了linux的优点,c++进度突然变快了
现在最新的趋势都彻底淘汰active那套,用powershell这种通用api接口了
【 在 leslin 的大作中提到: 】
:
: 以往的经验是vc的进度稍微慢一些。现在反而更快了?
--
FROM 122.224.174.*