问题标签 [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 投票
1 回答
219 浏览

c++ - 为什么我可以将 QObject* 分配给 QObject?

考虑以下代码:

为什么我可以将类型对象分配给类型A*变量A而编译器(或运行时)不会抱怨?

0 投票
3 回答
91 浏览

c++ - 我们是否需要显式使用指针类型的 CTOR?

explicit在这种情况下我们是否需要:

我认为即使我们不将构造函数标记为explicit,写出来也会是编译错误:

从指针到对象的隐式转换根本不可能通过构造函数进行,对吧?

0 投票
2 回答
939 浏览

c++ - std::unique_ptr 背后的原因是什么来自 T* 的构造函数是显式的吗?

由于std::unique_ptr提供了一种避免内存泄漏和确保异常安全的便捷方法,因此传递它们而不是原始指针是明智的。因此,一个人可能想要(成员)具有类似签名的函数

不幸的是,在实现这样的功能时,不能简单地

但必须改为

因为构造函数unique_ptr::unique_ptr(pointer)explicit. 这个构造函数背后的原因是explicit什么?

制作构造函数的动机之一explicit是防止意外的隐式类型转换。但是,由于unique_ptr不能按值传递,这应该不是问题,不是吗?

0 投票
0 回答
246 浏览

c++ - 来自互斥锁的显式 std::unique_lock 构造函数

我看到带有互斥锁的构造函数重载被标记explicit。我看不出有这样指定的原因。我认为允许从 mutex 隐式转换为相应的std::unique_lock. 这实际上可以很方便。例如,给定void func_a(std::unique_lock<std::mutex> lock)and std::mutex mut,我们可以直接func_a调用mutlike func_a(mut)。与通话有关的潜在危害是func_a(mut)什么?我认为没有任何效果可能会让用户感到惊讶。所以,问题是:标记构造函数背后的基本原理是什么explicit

0 投票
1 回答
1148 浏览

c++ - 使用显式定义的默认构造函数将 unique_ptr 的类内成员初始化程序设置为 nullptr 错误

我有一个类模板,它使用类内成员初始化程序将 unique_ptr 分配给 nullptr。如果我使用MyClass(){},一切都很好。如果我使用MyClass() = default,我会得到:

这是一个无法使用 g++ 4.8.4 编译的最小示例:

有任何想法吗?

0 投票
5 回答
4001 浏览

c++ - 防止在构造函数中进行不希望的转换

根据这里explicit

指定不允许隐式转换或复制初始化的构造函数和转换运算符 (C++11 起)。

因此,这两种技术是否相同?

0 投票
4 回答
12294 浏览

c++ - 带多个参数的显式构造函数

使具有多个参数的构造函数explicit有任何(有用的)效果吗?

例子:

0 投票
2 回答
252 浏览

c++ - 从构造函数二进制文件中删除“显式”是否兼容?

我们使用的外部库包含以下显式构造函数:

编译器抱怨以下警告:

仅删除explicitchart.h 中的关键字而不重新编译库以避免警告是否是二进制兼容的?我的感觉是它是安全的,因为explicit无论如何在这种情况下没有意义。任何人都可以确认吗?

0 投票
1 回答
300 浏览

c++ - 继承显式构造函数(英特尔 C++)

当使用 using继承基类的构造函数时,英特尔 C++ 编译器(版本 16.0.3.207 Build 20160415)似乎放弃了显式说明符。这是一个错误吗?

0 投票
1 回答
389 浏览

c++ - Incorrect use of explicit keyword in c++

I wanted to create a class MPSList where constructor has an explicit keyword associated with it.

Following is the bare minimal code:

CPP file that creates the object of MPSList class.

On compiling the above CPP file, I had expected to see an error in initializing the object. As I am passing a double whereas the constructor is explicitly expecting an int.

Command to compile: