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