A: 通用引用是一种可以绑定到左值或右值的引用类型,形式为T&&,且T需要被推导。右值引用只能绑定到右值,形式为T&&,且T是已知的类型。区分的关键在于是否存在类型推导。
A: 完美转发是指将一个函数的形参传递给另一个函数,且目标函数接收到的实参与被传递给转发函数的实参保持一致,包括类型、值类别和const/volatile属性。失败的情况包括:花括号初始化器、空指针(0或NULL)、仅有声明的整型static const数据成员、重载函数的名字和位域。
A: 解决办法包括放弃重载、传递const T&、传值、使用tag dispatch和使用std::enable_if约束模板。tag dispatch通过引入额外的标签参数来区分重载函数,std::enable_if通过type traits在编译期控制模板是否启用。
本书的目标读者是有一定C++基础,希望深入了解C++11和C++14新特性的程序员。本书假设读者已经熟悉C++的基本概念,如类、继承、多态等,并有一定的C++编程经验。本书适合以下人群阅读:
本书不适合C++初学者阅读,因为本书涉及许多高级主题,需要读者有一定的C++基础才能理解。对于C++初学者,建议先学习C++的基本概念,再阅读本书。
在C++98/03时代,C++程序员面临着许多挑战,例如手动内存管理、复杂的类型声明、缺乏并发支持等。C++11的出现旨在解决这些问题,引入了许多新特性,如auto类型推导、智能指针、移动语义、Lambda表达式、并发API等,使得C++编程更加现代化、高效和安全。C++14则进一步完善了C++11的特性,例如泛型Lambda、返回类型推导等,使得C++编程更加简洁和灵活。本书《Effective Modern C++》正是在这样的历史背景下诞生的,旨在帮助C++程序员掌握如何高效地使用这些新特性,从而编写出更现代、更高效的C++代码。