【发布时间】:2023-03-27 21:36:01
【问题描述】:
是
char x[10] = "banana";
被认为是从const char[7] 到char[10] 的隐式转换?
由于std::is_convertible<const char[7], char[10]>::value 的计算结果为false,显而易见的答案是它不是,但我在任何地方都找不到隐式转换的正确定义。阅读cppreference我会说这是因为:
每当某种类型的表达式时,都会执行隐式转换 T1 用于不接受该类型的上下文,但接受一些 其他类型 T2;特别是:......当初始化一个新对象时 类型 T2,包括返回 T2 的函数中的 return 语句;
虽然我不确定他们为什么没有从这个案例中排除显式构造函数。
后续问题(可能没用):
数组是否完全排除在任何类型的转换(即数组到数组的转换)之外?
【问题讨论】:
-
数组是否完全排除在任何类型的转换之外?您真的没有听说过数组到指针的转换吗?
-
@LanguageLawyer 我的意思是数组到数组的转换。我将编辑我的问题。
-
这是聚合初始化,请参见 字符数组 - en.cppreference.com/w/cpp/language/aggregate_initialization 没有发生转换。
-
@RichardCritten 这是聚合初始化你确定 cppreference 调用它聚合初始化是正确的吗?
-
跟进 - 字符数组的声明和初始化在标准dcl.init.string 中有自己的部分
标签: c++ initialization language-lawyer declaration implicit-conversion