问题标签 [explicit-constructor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
5355 浏览

c++ - 如果复制列表初始化允许显式构造函数会出现什么问题?

在 C++ 标准 §13.3.1.7 [over.match.list] 中,声明如下:

在复制列表初始化中,如果explicit选择了构造函数,则初始化格式错误。

这就是为什么我们不能这样做的原因,例如,这样的事情:

(请注意,这里发生的不是转换,即使构造函数是“隐式的”也不会是转换。这是foo直接使用其构造函数初始化对象。除了 之外std::string,这里没有转换。)

这对我来说似乎很好。隐式转换绝不会咬我。

如果{ "answer", 42 }可以初始化其他东西,编译器就不会背叛我做错事:

没有问题:调用不明确,代码无法编译,我必须明确选择重载。

由于明确规定了禁令,我觉得我在这里遗漏了一些东西。据我所知,列表初始化选择显式构造函数对我来说似乎不是问题:通过使用列表初始化语法,程序员已经表达了进行某种“转换”的愿望。

会出什么问题?我错过了什么?

0 投票
2 回答
278 浏览

c++ - 使用“X x(42)”和“X x = 42”构建对象的区别?

假设我们有定义了构造函数的类X(int value)X。

这在语义上是否等效?

我相信只有在 X 的构造函数中添加显式关键字时才会出现差异。否则编译器会将表达式简化X x = 42;X x(42);

如果我错了,请纠正我。

0 投票
2 回答
12288 浏览

c++ - “多个运算符 + 匹配这些操作数”错误

我正在为学校作业创建一个 Money 课程。我已经定义了从 Money 到 double 的转换,我有一个 Money 的构造函数,它接受一个 int,另一个构造函数接受一个 double,并且我重载了“+”运算符以将两个 Money 类型的对象相加。当我尝试执行类似myMoney + 10myMoney 是 Money 类型的对象,而 10 显然是一个整数之类的操作时,会出现错误消息。以下是其余相关代码:

如果我尝试Money(double(myMoney)+10)并且如果我明确两个构造函数,该程序实际上可以工作,但我不确定我是否理解自动转换发生了什么。谁能解释这种行为?

0 投票
4 回答
2339 浏览

c++ - 如何使用链表设置显式值构造函数?

对于一个项目,我试图设置一个链表对象,以便可以使用显式值构造函数对其进行初始化。我希望它看起来像这样:

但是当我打印出你的对象时,我看到的只是这个符号“=”,当我打印出你的长度时,我得到 -858993459

这是我的显式值构造函数,有人可以告诉我我做错了什么吗?

如果有帮助,这是类声明文件

0 投票
2 回答
2055 浏览

c++ - 继承和显式构造函数?

考虑以下代码:

有没有办法重新设计这段代码,Derived使所有的构造函数都Base具有相同的显式/隐式属性?

0 投票
3 回答
530 浏览

c++ - 隐式构造函数可用于从 Base 派生的所有类型(当前类型除外)?

以下代码总结了我的问题:

考虑到我已经有示例代码中的显式构造函数,如何将隐式构造函数限制为从父类派生的所有类(当前类除外),无论其模板参数如何?

编辑:对于来自 Base 的隐式构造函数,我显然可以写:

但是在那种情况下,我是否可以保证编译器不会将此构造函数用作隐式构造函数Derived2<OtherParameter1, OtherParameter2, OtherParameter>

EDIT2:在这里我有一个测试:(LWS在这里: http: //liveworkspace.org/code/cd423fb44fb4c97bc3b843732d837abc

最后一行让我担心。C++标准可以吗?它是 g++ 的错误吗?

0 投票
1 回答
22913 浏览

c++ - C++ 总是使用显式构造函数

阅读以下博客后:

http://xania.org/200711/ambiguous-overloading

我开始问自己“我不应该总是明确定义我的构造函数吗?”

所以我开始阅读比发现这篇文章更多的内容:

http://www.sjbrown.co.uk/2004/05/01/always-use-explicit/

这显示了另一个例子,也解释了他背后的想法。但当然,这是一位博主的想法。

我很高兴听到你们中的一些人的意见,你对这种方式的看法,你对这个主题的经验以及任何一种方式的一些例子都会很好。

0 投票
1 回答
724 浏览

c++ - 在 N 元构造函数上显式?

在本演示文稿中:http: //qtconference.kdab.com/sites/default/files/slides/mutz-dd-speed-up-your-qt-5-programs-using-c++11.pdf

作者建议 N 元构造函数受益于 C++11 版本的explicit关键字。

如果您有多个构造函数参数,C++11 中的哪些变化使这个关键字变得有用?

0 投票
1 回答
873 浏览

c++ - 显式构造函数和重载



嗨,大家好 :)

我的问题:在这种特定情况下,显式构造函数和两个运算符重载的目的是什么,以及它们在用法示例中是如何使用的?

提前致谢。

0 投票
2 回答
3299 浏览

c++ - 标记为“显式”的 C++11 initializer_list 构造函数

我可以将显式与 init-list ctor 一起使用来确保像 {a} 这样的表达式不会导致意外的隐式转换吗?还有一个想法:我应该担心吗?与简单的相比,编写{a}错误的可能性更小a,但另一方面,从代码中可能仍不清楚我们正在通过隐式转换构造对象。