C++ _平凡的_默认_构造函数是如何工作的?

C++ _平凡的_默认_构造函数是如何工作的?,c++,metaprogramming,c++03,C++,Metaprogramming,C++03,有人能解释一下的默认构造函数是如何工作的吗?我试图在boost实现中找到它,但不幸的是,宏太多了,我迷路了 < C++ >如何使用模板来检测 TrvialLoDebug构建器< /代码>? 我需要一个C++ 03中的例子,而不是11。 #include <boost/type_traits.hpp> #include <boost/static_assert.hpp> struct A{ A(){} int a; //std::vector&

有人能解释一下
的默认构造函数是如何工作的吗?我试图在boost实现中找到它,但不幸的是,宏太多了,我迷路了

< C++ >如何使用模板来检测<代码> TrvialLoDebug构建器< /代码>? 我需要一个C++ 03中的例子,而不是11。
#include <boost/type_traits.hpp>
#include <boost/static_assert.hpp>

  struct A{
    A(){}
    int a;
    //std::vector< int > b;
  };

int main(int argc, char* argv[])
{
  struct B{
    std::vector< int > b;
  };


  bool result =  boost::has_trivial_default_constructor<A>::value;

  //std::forward(&test);
  return 0;
}
#包括
#包括
结构A{
A(){}
INTA;
//std::vectorb;
};
int main(int argc,char*argv[])
{
结构B{
std::vectorb;
};
bool result=boost::具有\u平凡的\u默认\u构造函数::值;
//标准:正向(和测试);
返回0;
}
实际上,这是不可能的(在纯C++中)

使用SFINAE可以检测类型是否具有默认构造函数,因为它只涉及接口,但检测它是否无关紧要涉及实现

因此,编译器必须为此提供特定的内在特性。您可以找到一个内部函数列表,请注意,提供一些内部函数是因为它们需要编译器干预,而提供其他内部函数只是为了获得统一的集合或简化标准库实现

您正在寻找的特定内在特性是
\uuu具有\u平凡的\u构造函数
,根据注释,gcc和MSVC也支持该构造函数,或者
\uu是可平凡的\u构造的
(Clang特定)。我必须承认对前者有点不确定(如果该类型有多个构造函数怎么办?),后者可以用作:

template <typename T>
struct has_trivial_default_constructor {
    static bool const value = __is_trivially_constructible(T);
};
模板
结构具有\u平凡\u默认\u构造函数{
静态布尔常量值=uu可构造(T);
};

+1以抵制无聊的反对票。这是一个好问题。至少从我的标准来看,我不知道答案,而且觉得它很有趣。到底谁是愚蠢的downvoteers@Alexteo:Boost的C++03函数实现不一定能正常工作。我记得有些类型检查函数只有虚拟实现,因为即使使用编译器嗅探和特定于编译器的特性,它们也无法实现。也许您可以检查Boost实现是否有效,并发布结果?也许我对最近这个问题的回答会给您一些提示(双关语):@πάνταῥεῖ: 我们无法获得指向构造函数的指针,因为构造函数没有名称,所以我不知道答案如何应用?