草庐IT

default-constructor

全部标签

c++ - C c;之间有什么区别吗?和 C c = C();?

#includeusingnamespacestd;classC{private:intvalue;public:C(){value=0;cout输出:默认构造函数默认构造函数问题:对于Cc1;显然会调用默认构造函数,对于Cc2=C();我以为会调用默认构造函数来初始化一个临时对象,然后复制构造函数将调用初始化c2,看来我错了。为什么? 最佳答案 这是一个复制省略的例子——基本上允许编译器优化掉复制。此处描述:http://en.cppreference.com/w/cpp/language/copy_elision

c++ - 如何在 C++ 中创建一个 "default"流插入运算符?

我有一个类似于boost::any的类,因为它是一个模板化的容器类。我想要一种将包含的值写入字符串的方法。但是,如果包含的类型不提供流插入运算符,我希望我的方法返回一些默认字符串而不是编译失败。下面是我最接近的,应该清楚我要做什么:namespaceW{namespacehide{templatestd::ostream&operatorstructC{Tt_;std::stringToString()const{usingnamespacehide;std::ostringstreamoss;oss这很好用,但有一些注意事项。例如,如果我想为一个类实际提供一个重载的插入运算符,那么该

c++ - G++ 4.6 -std=gnu++0x : Static Local Variable Constructor Call Timing and Thread Safety

voida(){...}voidb(){...}structX{X(){b();}};voidf(){a();staticXx;...}假设在进入main之后,f被多个线程(可能竞争)多次调用。(当然,唯一对a和b的调用是上面看到的那些)以上代码在-std=gnu++0x模式下用gccg++4.6编译时:Q1。是否保证至少调用一次a()并在调用b()之前返回?也就是说,在第一次调用f()时,x的构造函数是否会同时调用一个自动持续时间局部变量(非静态)(而不是在全局静态初始化时间)?Q2。是否保证b()只会被调用一次?即使两个线程第一次同时在不同的核上执行f?如果是,GCC生成的代码通过

c++ - 为什么 Builder 模式比在正在创建的 Class 对象中带有参数的 Constructor 更好?

为什么我们不能在构造函数本身中执行不同的构建步骤。如果构建步骤采用参数,为什么不能将它们作为参数提供给构造函数并在构造函数中用于创建对象。据我所知,在Builder模式中,客户端要创建哪个特定对象;那么在正在创建的类的对象中使用构建器而不是带有参数的构造函数有什么优势? 最佳答案 哦!我得到它。我正在查看维基百科示例并意识到Builder为何有用。当客户端不知道将哪些参数传递给构造函数时,这很有用,因为它非常复杂,因此无法直接调用构造函数并获取对象。因此,他向ConcreteBuilders寻求帮助,他们知道将哪些参数传递给构造函数

c++ - 使用类定义之外的默认参数定义的默认构造函数,为什么会这样?涉及的模板会发生什么?

我知道这是一种错误的形式,默认值应该在声明中指定,但如果你愿意,请允许我花点时间……为什么要编译?到底发生了什么?#includeusingnamespacestd;classtest{public:test(intn);};test::test(intn=666){cout输出:666..模板如何影响同一段代码?templateclasstest{public:test(intn);};templatetest::test(intn=666){coutt;cin.sync();cin.ignore();return0;}错误:没有合适的默认构造函数可用感谢您的宝贵时间!

c++ - 何时以及如何默认初始化一个 const 变量?

clang++不允许defaultinitializationofaconstvariableofclass-typewithoutauser-definedconstructor;g++的限制稍微少一些(见下文)。根据thisanswer,这是因为POD类型“默认情况下未初始化”。如果我理解正确的话,这意味着默认初始化不会调用默认构造函数,也不会调用值初始化,因此POD类型中的数据成员不会被初始化。当然,其中包含未初始化值的constPOD类型是没有意义的,因为它们永远不会被初始化,因此使用起来不安全。这种情况有几种变体:技术上该类型是“POD”,但不包含数据成员(仅包含函数)。(c

c++ - 移动构造函数和赋值运算符 : why no default for derived classes?

为什么没有为派生类创建默认移动构造函数或赋值运算符?证明我的意思;具有此设置代码:#includestructA{A(){}A(A&&){throw0;}A&operator=(A&&){throw0;}};structB:A{};以下任一行抛出:Ax(std::move(A());Ax;x=A();但以下都没有:Bx(std::move(B());Bx;x=B();以防万一,我使用GCC4.4进行了测试。编辑:后来使用GCC4.5进行的测试显示了相同的行为。 最佳答案 通读0xFCD中的12.8(12.8/17特别是移动构造函数)

c++ - "vtable"链接器错误(涉及带有 "=default"的虚拟析构函数)- Clang 3.1 中的潜在错误?

我的代码中出现链接器错误。我已将其精确定位为以下最基本的要点。这段代码给出了链接器错误"vtableforFoo",referencedfrom:Foo::Foo()classFoo{public:Foo();virtual~Foo()=default;};Foo::Foo(){}但是这段代码没有给出任何错误:classFoo{public:Foo();virtual~Foo(){}};Foo::Foo(){}为什么?我认为=default基本上应该和那些空方括号做同样的事情。更新:我正在使用“AppleLLVM编译器4.1”,它是Xcode4.5.2的一部分。这可能是这个编译器中的错

c++ - 需要一个例子来说明默认构造函数没有被继承

我知道默认构造函数不是继承的,如n3337中所述.还有一个例子:structB2{B2(int=13,int=42);};structD2:B2{usingB2::B2;};很好的解释:ThecandidatesetofinheritedconstructorsinD2forB2is...—B2(int=13,int=42)—B2(int=13)—B2()最重要的是:ThesetofconstructorspresentinD2is—D2(),implicitly-declareddefaultconstructor,notinherited对我来说,这个例子并没有显示出区别,从某种意

c++ - 如何在类 noexcept 之外定义默认构造函数?

我知道标记为=default的构造函数将尽可能“尝试”为noexcept。但是,如果我在类的外部定义它,它就不再是noexcept,您可以从这段代码中看到:#include#include#includestructBar{Bar()=default;Bar(Bar&&)=default;//noexcept};structFoo{Foo()=default;Foo(Foo&&);};//movingthedefinitionoutsidemakesitnoexcept(false)Foo::Foo(Foo&&)=default;//notnoexceptanymoreintmain(