一些特别有趣的C++面试题
一、根据C++11标准,以下程序输出什么?
#include
解析: main函数的第一行,d1被初始化。此时虚基类A的构造函数最先执行,之后B,C,按D的继承顺序从左到右依次调用B的构造函数,C的构造函数,最后才调用D自己的构造函数。
main函数的第二行,d2被初始化。此时因为D类显示定义了拷贝构造函数,所以d2不会去调用父类的拷贝构造函数,所以答案为ABCd。
二、根据C++11的新标准,以下程序输出什么?
#include
答案: 112212
解析: 首先要明确一点,T&&在模板函数中并不一定是右值引用,它取决于实例化它的类型。如果用一个左值实例化,那个它会成为一个左值,如果用一个右值实例化变量,那么它会是一个右值。而对于x来说,不管他是左值还是右值,在函数内都是左值,所以main函数的第一行输出11,move函数返回变量的右值,所以第二行输出22,forward函数保持变量的原来类型,所以第三行输出12.
上一篇:c++学习之继承篇
下一篇:C++ 合成默认构造函数的真相