问题标签 [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.
c++ - 为什么我可以将 QObject* 分配给 QObject?
考虑以下代码:
为什么我可以将类型对象分配给类型A*
变量A
而编译器(或运行时)不会抱怨?
c++ - 我们是否需要显式使用指针类型的 CTOR?
explicit
在这种情况下我们是否需要:
我认为即使我们不将构造函数标记为explicit
,写出来也会是编译错误:
从指针到对象的隐式转换根本不可能通过构造函数进行,对吧?
c++ - std::unique_ptr 背后的原因是什么来自 T* 的构造函数是显式的吗?
由于std::unique_ptr
提供了一种避免内存泄漏和确保异常安全的便捷方法,因此传递它们而不是原始指针是明智的。因此,一个人可能想要(成员)具有类似签名的函数
不幸的是,在实现这样的功能时,不能简单地
但必须改为
因为构造函数unique_ptr::unique_ptr(pointer)
是explicit
. 这个构造函数背后的原因是explicit
什么?
制作构造函数的动机之一explicit
是防止意外的隐式类型转换。但是,由于unique_ptr
不能按值传递,这应该不是问题,不是吗?
c++ - 来自互斥锁的显式 std::unique_lock 构造函数
我看到带有互斥锁的构造函数重载被标记explicit
。我看不出有这样指定的原因。我认为允许从 mutex 隐式转换为相应的std::unique_lock
. 这实际上可以很方便。例如,给定void func_a(std::unique_lock<std::mutex> lock)
and std::mutex mut
,我们可以直接func_a
调用mut
like func_a(mut)
。与通话有关的潜在危害是func_a(mut)
什么?我认为没有任何效果可能会让用户感到惊讶。所以,问题是:标记构造函数背后的基本原理是什么explicit
?
c++ - 使用显式定义的默认构造函数将 unique_ptr 的类内成员初始化程序设置为 nullptr 错误
我有一个类模板,它使用类内成员初始化程序将 unique_ptr 分配给 nullptr。如果我使用MyClass(){}
,一切都很好。如果我使用MyClass() = default
,我会得到:
这是一个无法使用 g++ 4.8.4 编译的最小示例:
有任何想法吗?
c++ - 带多个参数的显式构造函数
使具有多个参数的构造函数explicit
有任何(有用的)效果吗?
例子:
c++ - 从构造函数二进制文件中删除“显式”是否兼容?
我们使用的外部库包含以下显式构造函数:
编译器抱怨以下警告:
仅删除explicit
chart.h 中的关键字而不重新编译库以避免警告是否是二进制兼容的?我的感觉是它是安全的,因为explicit
无论如何在这种情况下没有意义。任何人都可以确认吗?
c++ - 继承显式构造函数(英特尔 C++)
当使用 using继承基类的构造函数时,英特尔 C++ 编译器(版本 16.0.3.207 Build 20160415)似乎放弃了显式说明符。这是一个错误吗?
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: