implicit-conversion 相关问题

将对象,变量或值从一种类型转换为另一种类型以满足类型限制,而无需通过语言语法专门请求转换。

无法将非常量 T* 传递给接受 const T* 引用的函数

我很困惑为什么下面的代码无法编译 int foo(const float* &a) { 返回0; } int main() { 浮动* a; foo(a); 返回0; } 编译器给出错误如下: 错误:

回答 1 投票 0

无法使用带有多个隐式转换步骤的复制初始化[重复]

我无法理解为什么以下复制初始化无法编译: #包括 结构体基{}; 结构派生:base{}; 结构测试 { 测试(std::unique_ptr<...

回答 3 投票 0

Scala 中隐式转换如何工作?

更具体地说,BigInt 如何将 int 转换为 BigInt? 源代码中这样写道: ... 隐式 def int2bigInt(i: Int): BigInt = apply(i) ... 这段代码是如何被调用的呢? 我可以

回答 3 投票 0

C# 10 推断委托类型是否涉及隐式转换?

自 C# 10 起引入了推断委托类型。 但是,我对该功能的行为感到非常困惑: 一般来说,我认为我们可以合理地预期,如果可以编译: 变量 x...

回答 1 投票 0

推导的委托类型是否意味着隐式转换?

自 C# 7.3 起引入了推导委托类型。 一般来说,我认为我们可以合理地预期,如果可以编译: var x = (my_表达式); SomeType y = x; 这也应该编译:

回答 1 投票 0

添加有符号和无符号整数

#包括 int 主函数(无效) { 无符号整数 a = 6; 整数 b = -20; a + b > 6 ?投入(“> 6”):投入(“<= 6"); } It is clear to me how the ternary op...

回答 4 投票 0

多个值可以隐式转换为一个对象吗?

有没有办法在将多个变量传递给函数时将它们隐式转换为类对象?它适用于单个变量,但是当我尝试传递多个变量时,它不会

回答 1 投票 0

是否可以以某种方式从公式中的文字整数导出模板参数?

我有一个类,它将整数包装成一系列只有编译器(和开发人员)知道的值,限制在运行时是未知的。该类实现了运算符,使得限制 ch...

回答 2 投票 0

ITC 的所有操作数的三元运算符开销

我无法帮助自己,但很难理解为什么三元条件的第三个操作数(假条件表达式)即使在控制条件 eva 时也会进行隐式类型转换...

回答 0 投票 0

自动将连续容器类型的连续容器类型转换为另一个通用的“连续容器类型视图”

我有以下代码 godbolt 链接: #包括 #包括 #包括 #包括 #包括 #包括 模板<

回答 1 投票 0

在 C 函数中修改二维数组后程序挂起 [重复]

该程序是一个井字游戏,它在从用户那里获取了 X 和 Y 值后挂起。 这是主文件: #包括 #包括 #include "input.cpp&quo...

回答 2 投票 0

从 ILS 货币转换回数字

我有一个格式化为 ILS(以色列新谢克尔)的货币输入,我希望我的 onChange 事件记录值,但记录为数字。这是我试过的: 我有一个格式化为 ILS(以色列新谢克尔)的货币输入,我希望我的 onChange 事件记录值,但记录为数字。这是我试过的: <CurrencyInput onChange={(e) => setAmount(Number(e.target.value.replace("&#8362", ""))) } decimalsLimit={2} intlConfig={{ locale: "he-IS", currency: "ILS" }} ></CurrencyInput> 但是,我仍然得到 NaN(不是数字)结果。 任何想法?

回答 0 投票 0

数组衰减为指针作为函数参数

我知道c编译器认为以下函数定义相同 无效测试(int *数组); // 全部转换为第一个 无效测试(整数数组[]); 无效测试(整数数组[3]); 并在 C99 站...

回答 2 投票 0

“ptr”的大小是多少? [关闭]

#include 主函数() { char *s[] = {"ice","green","cone","please"}; char **ptr[] = {s+3,s+2,s+1,s}; char ***p = ptr; printf(&qu...

回答 2 投票 0

为什么指向函数的指针等于 1? [重复]

检查以下代码: #包括 使用命名空间标准; int& foo() { 静态整数 i = 0; 返回我; } 诠释主要(){ 计算<< &foo() << endl; cout <...

回答 3 投票 0

为什么函数可以接收一个字符数组作为字符指针,为什么函数可以改变元素的值?

我将 char 指针声明为函数的参数,并将 char 数组作为参数。 有人告诉我 char 指针和 char 数组是不同的类型。 但是函数可以有一个 char 数组作为...

回答 1 投票 0

将函数指针分配给另一个函数的地址时,在'='标记之前出现错误预期的非限定ID

我有以下程序,我尝试使用函数指针来“节省内存”,方法是将函数的地址保存到成员变量,即函数指针。 函数 p...

回答 2 投票 0

直接初始化中的转换运算符

C++14 标准 (N4296) 在 8.5/17.6.1 中说 如果初始化是直接初始化 [...],则考虑构造函数。列举了适用的构造函数,选出最好的 一个是

回答 1 投票 0

为什么 const char* 隐式转换为 bool 而不是 std::string?

#include #包括 结构我的结构{ mystruct(std::string s){ std::cout<<__FUNCTION__ <<" String "< #include <iostream> #include <string> struct mystruct{ mystruct(std::string s){ std::cout<<__FUNCTION__ <<" String "<<s; } explicit mystruct(bool s) { std::cout<<__FUNCTION__<<" Bool "<<s; } }; int main() { const char* c ="hello"; mystruct obj(c); return 0; } 输出: mystruct Bool 1 为什么 const char* 隐式转换为 bool 而不是 std::string,尽管构造函数需要 explicit 类型? 这里如何应用隐式转换优先级? 因为const char*到bool的隐式转换是标准转换,而const char*到std::string是自定义转换。前者排名更高,在 overload resolution. 中获胜 标准转换序列总是优于用户定义的转换序列或省略号转换序列。 BTW:mystruct obj(c);执行直接初始化,explicit转换构造函数包括mystruct::mystruct(bool)也被考虑。结果,c 被转换为 bool 然后传递给 mystruct::mystruct(bool) 作为构造 obj. 的参数 直接初始化比复制初始化更宽松:复制初始化只考虑非显式构造函数和非显式用户定义的转换函数,而直接初始化考虑所有构造函数和所有用户定义的转换函数。 关于explicit说明符, 指定构造函数 or conversion function (since C++11) or deduction guide (since C++17) 是显式的,也就是说,它不能用于 隐式转换 和 copy-initialization. “为什么 const char* 隐式转换为 bool 而不是 std::string,尽管构造函数需要 explicit 类型?”: 标准转换优先于用户定义的转换。 char const* 是指向常量字符的指针,指针可以隐式转换为 bool :如果它是 nullptr,则转换为 false,否则转换为 true。 您曾经在检查指针是否为NULL的情况下看到如此有效的转换,所以如果不是nulptr我们安全地取消引用它否则它具有nullptr值因此它是不正确的取消引用它: int* ptr = nullptr; if(ptr) // false because ptr has nullptr or NULL or 0 or 0x000000 address value std::cout << ptr << '\t' << *ptr << '\n'; // not executed ptr = new int(10); // valid and non-nullptr if(ptr) // non-nullptr so condition succeeds std::cout << ptr << '\t' << *ptr << '\n'; // 0FED155 10 delete ptr; // free memory explicit构造函数意味着它只能被显式调用,唯一的方法是像你的情况一样通过直接初始化: mystruct obj(c); // direct initialization mystruct obj = c; // copy-initialization. Error: constructor myStruct(bool) is `explicit` 只是添加到已经很好的答案中。您可以通过添加 delegating constructor 来解决这个问题,如下所示: mystruct(const char* s):mystruct(std::string(s)) {} 这将在重载决策中胜过 bool。 另一种选择是在这里避免使用 bool 并使用 bool 但具有更多含义的东西。这可能是'布尔盲目'的一个例子

回答 3 投票 0

这个转换在C中有效吗

因为直接转换为其他类型的 void ** 是无效的,这个转换在 C 中有效吗? void swapValues(void **av, void **bv, size_t size) { int *a = *av; int *b = *bv; 炭火...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.