1
across 2020-11-11 10:29:22 +08:00
首先,C++不是 Python,学习路线就是从 03 一路学到 14,再之后看你用不用得上了。
|
2
linux40 2020-11-11 10:30:43 +08:00
不是能不能,而是最好直接从 20 开始。
|
3
jjianwen68 2020-11-11 10:36:07 +08:00
但很多实际需要 c++的,还不会直接使用 c++20,一般还是没有使用这么新的编译器
|
4
tianshilei1992 2020-11-11 10:37:05 +08:00
越来越复杂是真的,越来越好用也是真的。要真想深学 C++,基础的那些东西(比如对象模型)还是少不了的,但是这些东西又和哪一代 C++ 没有太大的关系。新特性更多的是语法糖还有更加完善的 STL 而已。
|
6
luoqeng 2020-11-11 10:45:08 +08:00
完全可以
|
7
tamlok 2020-11-11 10:47:59 +08:00 via Android
不能~编译器都支持了吗?
|
8
llvm98 2020-11-11 11:06:23 +08:00 1
我个人感觉的话,如果 C++ 想学明白,历史包袱是很难避免的(除了一些语法糖),不过还是要看自己的学习方法,的确有些人是把 C++ 当 Python 学,尤其是一些参加竞赛的同学,先用熟 API 再深入学习,也学的很好,但我自己经验来讲,学了 C 和操作系统之后,再按自己需求去一点一点地学 C++ 就会感觉比较自然。不过话说回来,按版本学的我还没怎么见过,哈哈哈
|
9
gainsurier 2020-11-11 11:18:00 +08:00 1
C++ Primer 第 6 版快来了,基于 20
|
10
Alexhohom 2020-11-11 11:33:25 +08:00
并不能
|
11
Wirbelwind 2020-11-11 12:07:23 +08:00
可以 不要写 oop
|
12
Cbdy 2020-11-11 12:09:58 +08:00
首先,你要找到一个编译器支持 C++20
|
13
raaaaaar 2020-11-11 12:10:05 +08:00 via Android
。。我就刷刷算法题,就调调 API,真 c with class 。。
|
14
wtsamuel 2020-11-11 12:33:10 +08:00
你只要吧 c++ 当作 c with class,哪个版本都好用
|
15
cmdOptionKana 2020-11-11 12:42:28 +08:00
学习可以,但具体工作的时候还是看项目的历史包袱。
|
16
Tony042 2020-11-11 13:00:23 +08:00
C++学 17,但是主要学 11,20 的话各大编译器支持还不完全
|
17
ppphp 2020-11-11 13:00:37 +08:00
真想学好可以直接从 rust 开始。。。
|
18
newmlp 2020-11-11 13:02:18 +08:00
没问题,如果仅仅是自己学一下
|
19
luplus 2020-11-11 13:20:17 +08:00
现在 11 用的最多,20 不知道要多久才能用上,而且都是一些特性的改变,你把前面基础弄扎实,其他的都好说
|
20
songtinhuang 2020-11-11 13:34:08 +08:00
先探索探索可行性。
Cpp20 估计不行,要等 GCC 或者 clang 或者 MSVC 哪家先支持完整的 CPP20 。 另外,C++之父是建议先学 modern cpp 的。我推荐你从 17 开始。 |
21
xdeng 2020-11-11 13:48:23 +08:00
使用过程中 难免会遇到 C89 等旧的库的。
|
22
GromHellscream 2020-11-11 13:50:18 +08:00
我是从 11 开始学的
|
23
Stoulla 2020-11-11 14:21:27 +08:00 via Android
建议从 14 或者 11 开始学
|
24
nicebird 2020-11-11 14:31:38 +08:00
11 开始会好点,用的比较广。
|
25
ysc3839 2020-11-11 14:39:03 +08:00 1
个人项目的话是应该的,许多特性用起来挺爽的。
举个典型例子:调用一些库,需要传递一个 buffer 进去接收字符串并保存到 std::string 的情景。 以前经常看到这种写法: auto len = get_string_length(); char* buffer = new char[len]; get_string(buffer); std::string result(buffer, len); delete[] buffer; return result; 但是从 C++ 17 开始,可以这么写: auto len = get_string_length(); std::string result; result.resize(len); get_string(result.data()); return result; 后者与前者相比:代码更加简洁,少了一次拷贝,不需要手动释放内存,在遇到异常时不会导致内存泄漏。 另外按照 Stack Overflow 上的说法,自 C++11 开始就能用这种方法了,要把 string.data() 换成 &string[0] https://stackoverflow.com/questions/1042940/writing-directly-to-stdstring-internal-buffers |
27
rogerchen 2020-11-11 15:43:29 +08:00
@ysc3839 result.data() 就只在 since 17 until 20 这一个小时间窗口里返回了一个可写的 CharT*,之前是 const CharT*,之后是 constexpr CharT*,怕是都不能用你这个方法了。至于 &string[0],只要 cpp 还是 zero overhead,C++哪个版本都可以怒草类型系统。
|
28
ysc3839 2020-11-11 16:18:56 +08:00 via Android
@Cryse 我好像没看过专门讲解新特性的书籍或者文档,基本都是从别的项目或者 en.cppreference.com 了解到的。
如果要推荐的话可以看看这个 https://changkun.de/modern-cpp/ |
29
ysc3839 2020-11-11 16:23:19 +08:00 via Android
@rogerchen constexpr 修饰的是函数,不是返回值类型,返回值类型还是 CharT*。
至于 &string[0],Stack Overflow 上的说法是因为 C++11 之前标准没有规定一定要连续存储,(&string[0]) + 1 不一定等于 &string[1],并不保证可用。 |
30
johnli 2020-11-11 17:49:15 +08:00 2
|
31
GeruzoniAnsasu 2020-11-11 18:50:48 +08:00
@johnli hhh 其实还挺科学的,毕竟 rust 是最新的“想要集大成”的复杂语言,跟 c++努力方向一致
|
32
liuguangxuan 2020-11-11 19:10:03 +08:00 via Android
@gainsurier 哪里看到的消息,老哥。
|
34
Jirajine 2020-11-11 19:19:01 +08:00 via Android 1
照你这样说直接学 rust 就完了,cpp 一路都是缝合过来的。
|
35
owt5008137 2020-11-11 23:27:16 +08:00 via Android
不能。
目前基本上没有支持 c++20 特性的生产环境。 目前还没有哪个编译器能完整支持 c++20 。 目前还没有哪个编译器对 c++20 支持的特性完全进入了非体验阶段。 C++20 很多设计也是有历史包袱的,而且也是为了解决之前的问题,不了解一下根本不知道为嘛现在设计成这样。 如果想要完全丢弃历史包袱,不如就像上面很多人说的直接学 Rust |
36
neoblackcap 2020-11-12 03:29:42 +08:00
@songtinhuang 最快应该是 clang 吧,我看他们挺积极的。不过嘛,完整支持就不好说。我看历来都有各种各样的特性不会被实现
|
37
js8510 2020-11-12 04:57:30 +08:00 1
我是在现在公司入职后学的 C++,我也在内部问过类似问题。不同大佬给了我不同甚至相反的意见。C++ 真的 很特别,你要问 best practices 或者 principle, 其他语言一般都有一致的答案,但是 c++往往会出现分歧。我的建议是看看就好,凭自己感觉选在。重点是开始做。
以我学习不同语言的经验,我当时就直接开始做。写代码,开始是内部课程的作业,找组里的人给我 code review. 然后是一些简单的业务逻辑,有其他人给我 reivew 慢慢就上手了。 |
38
PepperEgg 2020-11-12 09:00:09 +08:00
11 起步。20 太新,没有多少编译器支持全部特性。另外 17 也是不错的选择。
|
39
auto8888 2020-11-12 09:09:31 +08:00
建议 C11 关键是看你的使用场景
|
40
lonelygo 2020-11-12 10:02:57 +08:00
并不能,17 对于大多数生产项目来说“已经够新了”。
祖传代码 11 的还有很多。 所以,11 开始吧 |
41
lonewolfakela 2020-11-12 10:51:51 +08:00
@neoblackcap 按照 https://en.cppreference.com/w/cpp/compiler_support 这里给出的信息,gcc 、clang 、msvc 三家里,clang 的进度是最慢的一个……
|
42
shfanzie 2020-11-12 10:53:26 +08:00
从 11 开始学
|
43
neoblackcap 2020-11-12 11:28:03 +08:00
@lonewolfakela 我感觉里面的缺的特性更像 clang 不会去实现了
|
44
lzhCoooder 2020-11-13 11:52:49 +08:00
c++11 都成祖传代码了.... 看你需求了我有些.cc .cpp 直接改名.c 都能编译,我觉得 c++11 和 c99 已经足够了
|