问题标签 [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 回答
693 浏览

c++ - 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?

一些(很多?)程序员被介绍给两者std::string_viewstd::string问自己:“为什么我可以将后者转换为前者,而不是反过来呢?”

问题的一部分在这里得到了回答:

为什么没有从 std::string_view 到 std::string 的隐式转换?

一个人可以喜欢或不喜欢的原因。但是 -显式构造函数呢?我在 cppreference.com的std::string构造函数页面上没有看到一个?

对有关隐式构造函数的问题的两个答案基本上都表明隐式构造函数会导致内存分配和内存复制,而程序员并不清楚这一点。好的,好吧,使用显式构造函数 - 程序员确实想要分配和复制。为什么不给他/她呢?

0 投票
2 回答
316 浏览

c++ - cppcheck 建议的 C++ 使用显式

使用强制转换构造函数不好吗?否则为什么代码质量检查器(在我的例子中是 cppcheck)会不断建议在单参数构造函数之前添加显式?

如果我想做什么

如果我按照“建议”写

会抛出一个错误,但如果我使用第一个错误,我会收到一个警告,我必须记录以通过代码审查。

0 投票
1 回答
48 浏览

c++ - 无法将元素添加到容器中如果 T 具有显式构造函数,则使用 emplace new

我正在编写一个固定大小的容器类型,放置新。当我测试它时,我发现如果类型 T 具有显式 ctor,则类似“emplace_back()”的函数无法编译。

这是一个代码示例(缺少删除调用等):

错误是:“在 'void emplace(TestType*, Args&& ...) [with Args = {int}]'的实例化中:24:22:从这里需要 16:64:错误:没有匹配的函数来调用'转发(int&)'"

stackoverflow 上有一些类似的问题,但是这些主要是关于 std::map 的,可能我的问题不同。(如果没有,我仍然不明白发生了什么。)

在(例如)std::vector emplace_back() 的情况下,它适用于任何具有显式 ctor 的 T 类型,为什么它不适用于我的容器类型?这编译得很好:

感谢您的帮助!

0 投票
1 回答
96 浏览

c++ - 为什么转换构造函数优于转换运算符?

我有这个类SmallInt应该表示范围内的正整数值 - 包括0-255

  • 我重要的是:为什么我可以指定smi显式调用operator int&:smi.operator int&() = 33但不能隐式调用 : smi = 33;

  • 第一个表达式 ( smi = 33;) 抱怨构造函数SmallInt(int)begin explicit;我知道,但我有返回可修改的普通左值的转换运算符。那么换句话说,为什么在这样的隐式赋值中构造函数优于转换运算符?

0 投票
1 回答
139 浏览

c++ - 为什么我的显式构造函数会为我的转换运算符创建这种歧义?

我无法弄清楚为什么我的转换运算符正在考虑显式构造函数。

如果我像这样直接调用运算符:A<float> b = a.operator A<float>();那么它工作正常,所以我想知道是否有一些关于 static_cast<> 用于调用我不知道的转换运算符的规则。但是我发现很难理解的是,当我没有以任何方式显式调用它们时,为什么它甚至会考虑显式构造函数,据我所知。

我正在用 g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 编译

0 投票
2 回答
57 浏览

c++ - C++ 复制赋值运算符行为

我使用下面的代码来测试复制赋值运算符的行为:

我预计 p1 和 p2 的值相同stamina。但输出显示 p2stamina与 p1 不同

为什么复制赋值运算符不将 p1 的值复制stamina到 p2?

0 投票
0 回答
20 浏览

c++ - 参数化构造函数未显式调用,但在隐式调用时调用

我创建了一个名为Rectangle的类并实现了一个参数化构造函数并创建了 Rectangle 类的三个实例

编译此源代码文件时没有问题。

但是在实现复制构造函数之后,我得到了一个错误。

错误信息

为什么在实现复制构造函数之后会发生这种情况,并且只针对显式构造函数调用?