C++ 的僵尸标识符(Zombie identifiers)(截止 C++23)
C++ 11 之前,C++ 的世界波澜不惊,但是从 C++ 11 开始突然发力,大量新的语言特性被引入,同时大量旧的内容被淘汰。C++ 版本迭代如此之快,以至于有些内容都还没有见过就已经被淘汰了。正所谓步子迈的太大容易那个什么的,以至于出现了 C++ 11 才引入的内容就在 C++ 17 被删除这样“惨绝人寰”的事情。这里列出了截至 C++ 23 已经或即将要淘汰的东西,有的是语言特性,有的是标准库的内容。这些已经确定被淘汰或即将被淘汰的,但是目前还在各种代码中存在的标识符被成为僵尸标识符。
被删除的内容通常会先在某个版本被标记为“弃用”,然后在后续的某个版本中被正式移除。这些僵尸标识符如果你都没听说过,那么恭喜,你省事儿了。如果你还在学习 C++,那么这个列表一定要看看,远离这些僵尸标识符,避免惨剧发生在自己身上。
1 C++ 14 删除的内容
(1)gets() 函数(在 C++ 11 被弃用)
2 C++ 17 删除的内容
(1)auto_ptr<> (在 C++ 11 被弃用)
(2)binary_function<> (在 C++ 11 被弃用)
(3)bind1st<>() (在 C++ 11 被弃用)
(4)bind2nd<>() (在 C++ 11 被弃用)
(5)binder1st<> (在 C++ 11 被弃用)
(6)binder2nd<> (在 C++ 11 被弃用)
(7)const_mem_fun_ref_t<> (在 C++ 11 被弃用)
(8)const_mem_fun_t<> (在 C++ 11 被弃用)
(9)const_mem_fun1_ref_t<> (在 C++ 11 被弃用)
(10)const_mem_fun1_t<> (在 C++ 11 被弃用)
(11)get_unexpected() (悲剧,C++ 11 才引入的内容)
(12)mem_fun<>() (在 C++ 11 被弃用)
(13)mem_fun_ref<>() (在 C++ 11 被弃用)
(14)mem_fun_ref_t<> (在 C++ 11 被弃用)
(15)mem_fun_t<> (在 C++ 11 被弃用)
(16)mem_fun1_ref_t<> (在 C++ 11 被弃用)
(17)mem_fun1_t<> (在 C++ 11 被弃用)
(18)pointer_to_binary_function<> (在 C++ 11 被弃用)
(19)pointer_to_unary_function<> (在 C++ 11 被弃用)
(20)ptr_fun<>() (在 C++ 11 被弃用)
(21)random_shuffle<>() (在 C++14 被弃用)
(22)set_unexpected() (在 C++ 11 被弃用)
(23)unary_function<> (在 C++ 11 被弃用)
(24)unexpected() (在 C++ 11 被弃用)
(25)unexpected_handler (在 C++ 11 被弃用)
(26)std::ios_base::io_state (在 C++ 98 被弃用)
(27)std::ios_base::open_mode (在 C++ 98 被弃用)
(28)std::ios_base::seek_dir (在 C++ 98 被弃用)
(29)std::basic_streambuf<CharT,Traits>::stossc (在 C++ 98 被弃用)
3 C++ 20 删除的内容
(1)binary_negate<> (在 C++17 被弃用)
(2)get_temporary_buffer<>() (在 C++17 被弃用)
(3)is_literal_type<> (C++ 11 引入,在 C++17 被弃用)
(4)is_literal_type_v<> (C++ 11 引入,在 C++17 被弃用)
(5)not1<>() (在 C++17 被弃用)
(6)not2<>() (在 C++17 被弃用)
(7)raw_storage_iterator<> (在 C++17 被弃用)
(8)result_of<> (C++ 11 引入,在 C++17 被弃用)
(9)result_of_t<> (C++ 14 引入,在 C++17 被弃用)
(10)return_temporary_buffer<>() (在 C++17 被弃用)
(11)unary_negate<> (在 C++17 被弃用)
(12)uncaught_exception() (在 C++17 被弃用)
(13)is_pod<> (C++ 11 引入,在 C++17 被弃用)
(14)std::function::argument_type (在 C++17 被弃用)
(15)std::function::first_argument_type (在 C++17 被弃用)
(16)std::function::second_argument_type (在 C++17 被弃用)
4 C++ 23 (即将)被删除的内容
(1)declare_no_pointers() (C++ 11 引入)
(2)declare_reachable() (C++ 11 引入)
(3)get_pointer_safety() (C++ 11 引入)
(4)pointer_safety (C++ 11 引入)
(5)undeclare_no_pointers() (C++ 11 引入)
(6)undeclare_reachable<>() (C++ 11 引入)
5 未来可能被删除的
(1)std::aligned_storage (C++ 11 引入,将在 C++ 23 被弃用)
(2)std::aligned_union (C++ 11 引入,将在 C++ 23 被弃用)
关注公众号,与作者互动: