问题标签 [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++ - 显式关键字是什么意思?
explicit
C++中的关键字是什么意思?
c++ - 如果我使用显式构造函数,是否需要将关键字放在 .h 和 .cpp 文件中?
其实我的问题都在标题中。
无论如何:
我有一个类,我使用显式构造函数:
.h
是否必须在 implementation(.cpp) 文件中放置显式关键字?
c++ - 多参数构造函数上的显式关键字?
我最近遇到了一些看起来很奇怪的类,它有三个构造函数:
这对我来说真的没有意义——我认为显式关键字是为了保护编译器选择的结构不受外来类型的影响。
这是允许的吗?如果是,那是什么意思?
c++ - C++ 不推荐将字符串常量转换为 'char*'
我有一堂课private char str[256];
为此我有一个显式的构造函数:
我称之为:
当我编译它时,我收到以下警告:
不推荐将字符串常量转换为 'char*'
为什么会这样?
c++ - 具有默认值的单参数构造函数是否可以进行隐式类型转换
我理解使用显式关键字来避免单个参数构造函数或具有多个参数的构造函数可能发生的隐式类型转换,其中只有第一个参数没有默认值。
但是,我想知道,在隐式转换方面,具有默认值的单个参数构造函数的行为是否与没有默认值的构造函数相同?
c++ - 显式默认构造函数的目的
我最近注意到 C++0x 中的一个类需要显式的默认构造函数。但是,我没有想出一个可以隐式调用默认构造函数的场景。这似乎是一个毫无意义的说明符。我想也许它会Class c;
不赞成,Class c = Class();
但情况似乎并非如此。
来自 C++0x FCD 的一些相关引用,因为我更容易导航[类似的文本存在于 C++03 中,如果不在同一个地方]
12.3.1.3 [class.conv.ctor]
默认构造函数可以是显式构造函数;这样的构造函数将用于执行默认初始化或值初始化 (8.5)。
它继续提供一个显式默认构造函数的示例,但它只是模仿了我上面提供的示例。
8.5.6 [decl.init]
默认初始化 T 类型的对象意味着:
— 如果 T 是(可能是 cv 限定的)类类型(第 9 条),则调用 T 的默认构造函数(如果 T 没有可访问的默认构造函数,则初始化是非良构的);
8.5.7 [decl.init]
对 T 类型的对象进行值初始化意味着:
— 如果 T 是具有用户提供的构造函数(12.1)的(可能是 cv 限定的)类类型(第 9 条),则调用 T 的默认构造函数(如果 T 没有可访问的默认构造函数,则初始化是非良构的);
在这两种情况下,标准都要求调用默认构造函数。但是,如果默认构造函数是非显式的,就会发生这种情况。为了完整起见:
8.5.11 [decl.init]
如果没有为对象指定初始化器,则该对象是默认初始化的;
据我所知,这只会导致没有数据的转换。这没有任何意义。我能想到的最好的方法如下:
但显然这不是 C++ 处理默认参数的方式。还有什么会使explicit Class();
行为与 不同Class();
?
产生这个问题的具体例子是std::function
[20.8.14.2 func.wrap.func]。它需要几个转换构造函数,其中没有一个被标记为显式,但默认构造函数是。
c++ - C++中显式赋值和隐式赋值有什么区别
这些之间有什么区别(如果有的话),在什么情况下显式和隐式赋值不同以及如何?
http://weblogs.asp.net/kennykerr/archive/2004/08/31/Explicit-Constructors.aspx
编辑:我实际上刚刚发现这篇文章,它使整个事情变得更加清晰......它提出了另一个问题,如果你(通常)标记构造函数采用原始类型的单个参数 - 数字/布尔/字符串 -尽可能明确并保留其余部分(当然要注意诸如构造函数之类的陷阱(int, SomeType = SomeType())
?
c++ - 是否有明确的副本
我正在寻找这样的语法:
换句话说:我正在寻找一种显式的复制语法,以允许方法返回一个副本,即使我的复制构造函数是显式的。
我正在使用 GCC 4.4.5。
非常感谢,
查理
c++ - 什么时候应该使用直接初始化,什么时候应该使用复制初始化?
它是简单的偏好还是有特定的情况需要一个而不是另一个?我指的是以下变体进行初始化