深入浅出C++模板元编程(3)【点击查看详情】
在C++中,unevaluated expressions如sizeof、typeid和decltype等,虽然不会对操作数进行实际计算,但它们的expression context仍然完整。例如,当尝试在expression context中创建一个没有默认构造函数的类对象时,sizeof会检查构造函数的正确性,即使实际上并不执行。这种特性允许我们通过元编程实现对默认构造函数的检查。一个检测默认构造函数的例子是,尽管std::vector可以存储没有默认构造函数的类型,但在尝试使用默认初始化创建一个std::vector时,编译器会给出明确的错误。通过使用SFINAE,可以通过尝试构建一个0(一个默认构造函数可以接受的值)来判断类型是否支持默认构造。
相关视频/文章