implicit-conversion 相关问题

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

在 C# 中是否可以为可空值和不可空值编写隐式转换运算符?

我正在尝试编写一个 Alias 类,它使我能够: int n = 新计数(1); 也就是说,它在本例中将 int 封装为 Count,这提供了一些类型安全性和域含义,同时它

回答 3 投票 0

静态隐式运算符

我最近发现了这段代码: 公共静态隐式运算符 XElement(XmlBase xmlBase) { 返回 xmlBase.Xml; } 静态隐式运算符是什么意思?

回答 5 投票 0

C# 枚举到字符串自动转换?

是否可以让编译器自动将我的 Enum 值转换为字符串,这样我就可以避免每次都显式调用 ToString 方法。这是我想做的一个例子: 嗯...

回答 6 投票 0

为什么我需要 `std::type_identity_t` 来启用隐式类型转换?

#包括 #包括 #包括 #包括 模板 结构体FmtString { std::format_string #include <concepts> #include <format> #include <string_view> #include <type_traits> template <typename ... Args> struct FmtString { std::format_string<Args ...> text; template <typename StringCompatible> requires (std::convertible_to<StringCompatible, std::string_view>) consteval FmtString(StringCompatible const& description) : text(description) {} }; template <typename ... Args> void fails(FmtString<Args ...> const&, Args&& ...) noexcept {} template <typename... Args> using FmtStringArgIdentity = FmtString<std::type_identity_t<Args> ...>; template <typename ... Args> void works(FmtStringArgIdentity<Args ...> const&, Args&& ...) noexcept {} int main() { works("test {}", 42); fails("test {}", 42); } GCC 错误消息: <source>: In function 'int main()': <source>:28:10: error: no matching function for call to 'fails(const char [8], int)' 28 | fails("test {}", 42); | ~~~~~^~~~~~~~~~~~~~~ <source>:18:6: note: candidate: 'template<class ... Args> void fails(const FmtString<Args ...>&, Args&& ...)' 18 | void fails(FmtString<Args ...> const&, Args&& ...) noexcept {} | ^~~~~ <source>:18:6: note: template argument deduction/substitution failed: <source>:28:10: note: mismatched types 'const FmtString<Args ...>' and 'const char [8]' 28 | fails("test {}", 42); | ~~~~~^~~~~~~~~~~~~~~ Compiler returned: 1 查看 libfmt 的源代码,我能够使我的代码工作。不幸的是,我不明白为什么这样做有效,也不明白为什么模板参数推导失败。 fails 调用有什么问题?为什么 works 调用可以解决这个问题? 实时代码 具有相同效果的更简单示例: #include <type_traits> template <typename T> struct foo { template <typename U> foo(U u) {} }; template <typename T> void fails(foo<T>,T) {} template <typename T> void works(std::type_identity_t<foo<T>>,T) {} int main() { fails(12.0,42); // error works(12.0,42); } 您无法从 int 推断出 12.0,从而将其转换为 foo<int>。用作构造函数模板参数的 double 和用于实例化 int 的 foo<int> 之间根本没有任何关系。任何 foo<T> 都有一个从 double 到 foo<T> 的转换构造函数。 std::type_identity 是非推导的上下文。对于 works<T>,T 仅从 42 推导出来,并且 works<int> 被实例化以获得 works<int>(foo<int>,int)。现在,隐式转换开始生效,并且 12.0 可以通过转换构造函数转换为 foo<int>。

回答 1 投票 0

你能解释一下为什么编译器会报错CS0826吗?

当我尝试创建隐式类型数组时,出现此错误。 我尝试编译这段代码: 公共课不好 { 公共静态隐式运算符好(坏坏) { 返回新的 Good()...

回答 1 投票 0

C++:显式实例化模板时的隐式转换

众所周知,当我们想要在头文件中声明模板化类/函数并在源cpp文件中定义它们时,必须在e...

回答 2 投票 0

C++:显式实例化模板时的隐式转换

众所周知,当我们想要在头文件中声明模板化类/函数并在源cpp文件中定义它们时,必须在e...

回答 1 投票 0

C++:显式初始化模板时的隐式转换

众所周知,当我们想要在头文件中声明模板化类/函数并在源cpp文件中定义它们时,必须在...

回答 1 投票 0

c++ 常用算术转换:cpp.sh 与 godbolt 不同的结果 - 谁错了?

这是标准算术转换的简单展示: // 示例程序 #包括 使用命名空间 std; int main() { 无符号长整型 a = 0; 整数 b = 1; 长隆...

回答 1 投票 0

初始化时的多个用户定义转换

我知道 C++ 在类型之间转换时只允许单个用户定义的隐式转换。然而,我最近遇到了一种情况,似乎是双重用户定义...

回答 1 投票 0

C 中的默认参数提升会导致错误,但我不知道具体原因

以下代码示例来自 K.N.KING 的《C 编程》。 A Modern Approach”,它不能正常工作,输出是 1 而不是 9。作者说这是一个问题引起的...

回答 1 投票 0

有关 Java 中原始数据类型的隐式类型转换的查询

我一直在学习 Java 中的类型转换,并且发生了这种情况。 首先,我给一个整型变量一个大值(大于字节 data_type 的范围)。 接下来我创建了一个字节变量...

回答 1 投票 0

隐式运算符导致方法签名解析不明确

我有以下方法: public void ConstrainBetween(最小数量,最大数量) { .. } public void ConstrainBetween(IParameter min, IParameter max) { ....

回答 1 投票 0

指向二维数组的指针访问冲突

#包括 int main() { int arr_2D[3][3]={ {1,2,3}, {11,22,33}, {111,222,333}}; int (*ptr)[3]=arr_2D; printf("ptr=0x%...

回答 2 投票 0

如何 std::cout << a type which has many (ambiguous) user-defined conversion functions?

这里我有一个 C++ 类,它处理远远超出 long long 的大数。它将数据存储为 std::string。现在我这里有很多很多转换器: 类 BigInt { 私人的: std::字符串x;

回答 1 投票 0

如何用c++编写默认的隐式转换器?

这里我有一个 C++ 类,它处理远远超出 long long 的大数。它将数据存储为 std::string。现在我这里有很多很多转换器: 类 BigInt { 私人的: std::字符串x;

回答 1 投票 0

为什么 scala 中不推荐使用隐式转换?

摘自“Scala with cats”(第 18 页): 隐式转换 当您使用隐式 def 创建类型类实例构造函数时,请务必将该方法的参数标记为 impl...

回答 2 投票 0

调用C++中隐式转换可以到达的成员函数

尝试创建一个类似于 std::reference_wrapper 的引用包装器,但可以调用包装对象的方法。 #包括 A类{ 民众: 无效 f() { ...

回答 2 投票 0

当两者都使用内存中的4个字节时,为什么float到int在java中没有隐式转换?

为什么float和int都需要4个字节的内存存储,但是int可以转换为float而float不能转换为int? 请从内存存储的角度解释一下,就像

回答 2 投票 0

C++ 运算符的隐式转换==

我无法理解为什么一个模板实例化在我的代码中有效,而另一个却不能。 我正在使用我创建的类模板: 模板 分配的结构体{ 公开...

回答 1 投票 0

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