草庐IT

Constructor

全部标签

c++ - 没有用于调用类构造函数的匹配函数

我正在练习OOP,我有以下类(class):Point和Circle。具体来说,Circle有一个中心点和一个半径。相关代码如下://Point.hclassPoint{public:Point(doublex,doubley);doublex()const;doubley()const;std::stringas_string()const;private:doublex_coord;doubley_coord;};//Circle.hclassCircle{public:Circle(constPoint¢er,doubleradius);Pointcenter()cons

c++ - 如何捕获构造函数异常?

我有一个C++类,它在失败时从构造函数中抛出异常。如何分配此类的本地实例(不使用new)并处理任何可能的异常,同时保持tryblock作用域尽可能小?本质上,我正在寻找与以下Java惯用语等效的C++:booleanfoo(){Barx;try{x=newBar();}catch(Exceptione){returnfalse;}x.doSomething();returntrue;}我不想从x.doSomething()中捕获异常,只捕获构造函数。我想我正在寻找一种方法来分离x的声明和初始化。是否可以在不使用堆分配和指针的情况下完成此操作? 最佳答案

c++ - 正在初始化.. 哪个更有效率?

我有以下问题。应遵循其中哪一项更好,为什么?stringstrMyString="SampleString";或stringstrMyString("SampleString");提前致谢。 最佳答案 我回答了here我在这个答案中加入的一件事是:两者都没有使用任何赋值运算符。不过,对字符串特定内容的简短说明。std::string有一个构造函数接受一个参数,该参数接受charconst*://simplifiedtoanormalclassdeclaration.std::stringactually//isatemplatein

c++ - 构造函数返回什么?

我的问题是构造函数返回什么?这个问题与“构造函数的返回类型是什么?”没有太大区别。我在某处读到构造函数返回一个完整的对象隐式(即隐式返回类型是类的名称)但不应显式指定。structempty{};intmain(){empty();//createsatemporaryandimplicitlyaconstructoriscalled}所以根据我的解释,隐式返回类型应该是类的名称,在本例中为空。我的狂野解释是否正确? 最佳答案 构造函数不返回任何内容。调用构造函数来初始化对象。构造函数只能用于初始化对象;您实际上不能显式调用构造函数

c++ - 谁能解释一下这个 C++ 引用用法

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Globalconststring&smellsbadtome,isittrulysafe?我无意中发现了以下代码并想知道它的优点std::stringconst&thestring("XYZ");事实是它正在构造对象并通过引用引用它。见惯了std::stringconsttheString("XYZ");想知道有什么区别。我很高兴该对象不会提前销毁,因为该对象与引用一起存在于堆栈中。

c++ - 我怎么说 "noexcept if execution of protected base constructor is noexcept"?

我们遇到过这种情况,想知道解决它的最佳方法templatestructA:T{A(T&&t)noexcept(noexcept(T(std::move(t)))):T(std::move(t)){}};不幸的是编译失败,因为T的移动构造函数是protected,我们只能在*this的构造函数初始化列表中调用它。使这项工作有什么变通办法,或者甚至有标准的方法吗? 最佳答案 您正在寻找noexcept(std::is_nothrow_move_constructible::value):http://en.cppreference.co

c++ - 无法在 C++ 模板的初始化列表中使用 lambda

我有一个带有std::function构造函数参数的类。classClazzA{public:ClazzA(functionfoo){}ClazzA(){ClazzA([](){});}};如果我有一个此类的实例作为另一个类的成员,我必须在初始化列表中调用构造函数。我可以传递一个lambda作为参数,它会自动转换:classClazzB{public:ClazzAa;ClazzB()://worksfine:a([](){}){}};但是如果ClazzB是一个模板,lambda不起作用:templateclassClazzC{public:ClazzAa;//worksfine:Cla

c++ - 当其他构造函数存在时,为什么 "ctor() = default"会改变行为?

为什么structwrapper{explicitwrapper(void*);wrapper()=default;intv;};intmain(){returnwrapper().v;}//YoushouldrunthisinDebugmode返回0xCCCCCCCC,而structwrapper{wrapper()=default;intv;};intmain(){returnwrapper().v;}和structwrapper{intv;};intmain(){returnwrapper().v;}都返回0? 最佳答案 在值

C++ move 语义 - 包装遗留 C API

我正在使用旧版CAPI,在该API下获取某些资源非常昂贵,释放该资源绝对至关重要。我正在使用C++14,我想创建一个类来管理这些资源。这是这件事的基本框架...classThing{private:void*_legacy;public:voidOperation1(...);intOperation2(...);stringOperation3(...);private:Thing(void*legacy):_legacy(legacy){}};这不是真正的单例模式。没有什么是静态的,可能有很多Thing例如,所有这些都管理着自己的遗留资源。此外,这不仅仅是一个智能指针。包裹指针,_

c++ - STL 容器如何复制对象?

我知道像vector这样的STL容器会在添加对象时复制对象。push_back方法如下所示:voidpush_back(constT&x);我很惊讶地看到它将项目作为引用。我写了一个示例程序来查看它是如何工作的。structFoo{Foo(){std::coutfoos;foos.push_back(f);这会复制对象,我可以看到它正在调用copy-constructor。我的问题是,当push_back将item作为引用时,它是如何调用复制构造函数的?或者我在这里遗漏了什么?有什么想法..? 最佳答案 它可能使用“placemen