gpt4 book ai didi

c++ - 从字符串文字初始化 char 数组是否被认为是隐式转换?

转载 作者:行者123 更新时间:2023-12-04 14:35:12 25 4
gpt4 key购买 nike

char x[10] = "banana";被认为是从 const char[7] 的隐式转换至 char[10] ?
std::is_convertible<const char[7], char[10]>::value评估为 false显而易见的答案是它不是,但我在任何地方都找不到隐式转换的正确定义。阅读cppreference我会说这是因为:

Implicit conversions are performed whenever an expression of some typeT1 is used in context that does not accept that type, but accepts someother type T2; in particular: ... when initializing a new object oftype T2, including return statement in a function returning T2;


尽管我不确定他们为什么不从这种情况下排除显式构造函数。
后续问题(可能没用):
数组是否完全排除在任何类型的转换之外(意思是数组到数组的转换)?

最佳答案

从语言法律的角度来说,从字符串文字初始化 char 数组是一种隐式转换。
[conv.general] :

An expression E can be implicitly converted to a type T if and only if the declaration T t=E; is well-formed, for some invented temporary variable t ([dcl.init]).


请注意,核心语言仅定义了从表达式到类型的隐式转换。因此,“从 const char[7]char[10] 的隐式转换”的含义是未定义的。 is_convertible<From, To>::valuefalse每当 To是一个数组类型,因为它被定义为产生 false如果 To不是有效的返回类型,而数组不是。 (这可以通过不同的方式实现。)
[meta.rel]/5 :

The predicate condition for a template specialization is_­convertible<From, To> shall be satisfied if and only if the return expression in the following code would be well-formed, including any implicit conversions to the return type of the function:

To test() {
return declval<From>();
}

数组很少会成为隐式转换的目标,因为它们既不是参数类型也不是返回类型。但它们不排除在 temporary materialization conversion 之外.

关于c++ - 从字符串文字初始化 char 数组是否被认为是隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69529544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com