转换匿名数组初始值设定项列表

2024-01-04

我可以成功地对 char 字符串数组进行初始化列表的 C 转换,但似乎无法使其与 C++ 转换 (static_cast) 一起使用:

int main()
{
   char x[] = "test 123";

   // This works fine:

   char **foo = (char *[]) { "a", x, "abc" };
   std::cout << "[0]: " << foo[0] << "    [1]: " << foo[1]
             << "    [2]: " << foo[2] << std::endl;

   // This will not compile ("expected primary-expression before '{' token"):

   //char **bar = static_cast<char *[]>( { "a", x, "abc" } );
   //std::cout << "[0]: " << bar[0] << "    [1]: " << bar[1]
   //          << "    [2]: " << bar[2] << std::endl;
}

这里可以使用 C++ 强制转换吗?如果是这样,正确的语法是什么?如果不是,为什么不呢?C 演员是否让我做了一些我不应该做的事情?

最终,我问这个问题的原因是我正在调用一个以 char 数组指针作为参数的函数,并且我想使用匿名数组作为调用参数。

我正在使用海湾合作委员会4.4.6。


我可以成功地对 char 字符串数组进行初始化列表的 C 转换

不,你不能。您根本没有使用初始化列表或 C 强制转换。您使用的是复合文字。这是 C 语言的特性,C++ 中不存在。一些编译器确实支持 C++ 作为语言扩展。

我强烈建议您使用编译器选项,该选项至少会在您使用非标准功能时发出警告,以避免出现这样的混乱。

但似乎无法让它与 C++ 强制转换一起使用

您无法转换初始值设定项列表表达式。您必须正常初始化一个命名数组,然后初始化指针 - 尽管您几乎不需要真正需要一个单独的指针变量,因为无论如何在大多数上下文中数组都会隐式衰减为指针。

const char* arr[] = { "a", x, "abc" };
const char** foo = arr;

我问这个问题的原因是我正在调用一个以 char 数组指针作为参数的函数,并且我想使用匿名数组作为调用参数。

如果您可以修改该函数,那么有一些方法可以允许在没有命名数组的情况下进行调用。你可以接受std::initializer_list,或者可以从初始化列表构造的类型,例如实例std::array.


附言。从字符串文字隐式转换为char*C++ 中也不允许 - 但某些编译器允许作为语言扩展。使用const char* here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转换匿名数组初始值设定项列表 的相关文章

随机推荐

  • 直接从 Outlook 拖放到 Web 表单

    我在网上搜索了一下 大部分答案都是无法完成 我的情况有点不同 因为我们正在开发的应用程序仅用于内部目的 并且可以允许浏览器中的任何安全级别 它也是基于内部网的 我还尝试查看是否有现成的 ActiveX 控件 但无法找到一个允许直接从 Out
  • Sympy - 改变绘图的 y 轴范围

    使用 Sympy 如何设置 y 轴的范围 plot x 2 2 我想让 y 轴从 0 到 7 当你绘图时 你可以使用 kwargsxlim and ylim设置轴限制 例如 gt gt gt plot x 2 2 xlim 3 3 ylim
  • 使用 Delphi 在运行时创建 TWebBrowser

    我有一个 TWebBrowser 对象 它在运行时创建并在后台使用 即不可见 问题是像 OnDocumentComplete 这样的事件在 Delphi2009 中不起作用或不会被触发 有什么建议吗 procedure TfrmMain F
  • 将文件写入通用应用程序数据文件夹被拒绝

    我使用以下函数将数据写入用户应用程序文件夹 private void WriteToLog string source string method string msg string LogFile Environment GetFolde
  • 对一系列门票进行排序[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 这是问题陈述 您有一叠包含出发地和目的地的车票 您将获得出发城市和目的地城市 你如何从堆栈中找到你的路线 这是我的解决方
  • 哪个更好的Javascript对象模式[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用“catch,when”捕获异常

    我在 C 中发现了这个新功能 它允许在满足特定条件时执行 catch 处理程序 int i 0 try throw new ArgumentNullException nameof i catch ArgumentNullException
  • 在 python 函数中使用 *args、**kwargs 时“获得关键字参数的多个值”

    传递命名参数时request通过 kwargs 我收到一个错误 Traceback most recent call last File testKwargs py line 9 in
  • Python re.findall

    我试图检索包含 名称 字段的所有标签 然后处理整个句子加上名称 这是我的测试代码 sourceCode
  • 无法将 4/23/12 12:00 AM 类型类 java.util.Date 转换为类 java.sql.Date

    我正在将我的项目从 WebSphere 7 迁移到 WebSphere 8 并且使用 JSF 1 2 我遇到了 IBM JSF html extended 标签和标准转换器的问题 这些转换器主要是 JSF 1 2 核心组件 我还将我的 Ja
  • 在R中绘制网络(控制边缘厚度加上不重叠的边缘)

    我需要使用 R 绘制一个具有 5 个节点和 20 个有向边 连接每 2 个节点的边 的网络 但我需要存在两个功能 能够控制每个边缘的厚度 边缘不重叠 即 从 A 到 B 的边缘不绘制在从 B 到 A 的边缘之上 我花了几个小时寻找解决方案
  • Scipy:ipython 笔记本中的并行计算?

    我正在做一个kernel density estimation数据集 点的集合 The estimation process没关系 问题是 当我试图获得density value对于每个点 速度都很慢 from sklearn neighb
  • 在 R 中对大数据进行 one-hot 编码的有效方法

    我正在尝试创建我的数据的独热表示 这是我的方法 data iris iris as data frame apply iris 2 function x as factor x head iris iris ohe lt data fram
  • 将控制值作为 html.Pagedlist 参数传递

    我正在使用分页列表来显示值列表 显示器工作正常 我使用提供的 Unobtrusive AJAX 来获取其他页面的数据 这就是我的分页控件的外观 Html PagedListPager Model CountryList page gt Ur
  • 如何在自定义容器视图控制器中实现交互式转换

    我实现了自己的自定义容器视图控制器 并尝试使其与 iOS 7 视图控制器转换兼容 我使我的自定义容器视图控制器符合UIViewControllerContextTransitioning我发送self当我打电话时transitionDura
  • gets() 仅读取换行符时会保存什么

    这是描述gets 来自普拉塔的C 底漆 通常 它从系统的标准输入设备获取一个字符串 你的键盘 因为字符串没有预定的长度 gets 需要一种方法来知道何时停止 它的方法是读取字符 直到到达换行符 n 字符 您生成的 按 Enter 键 它需要
  • 在Google Play商店中,如果生产版本高于测试版本会发生什么?

    假设我当前的版本如下 生产版本代码 1Beta 版本代码 2 只要测试版是最新的代码就一切OK 如果我在生产中更新新版本 版本 3 会发生什么 生产版本代码 3Beta 版本代码 2 我的问题是安装了 versionCode 2 的 bet
  • 从matlab绘图中获取平均值?

    当我有图表时 我有一个简单的图 其中包含大量数据点 有没有一种方法可以让我简单地单击所有这些点并让 matlab 给出它们的平均值 谢谢 另一种选择是使用数据刷 http www mathworks com access helpdesk
  • Laravel Spark 不显示存储在 /storage/app/public/profiles/ 目录中的图像

    上传的图像默认为 storage app public profiles 但前端生成的 URL 为 storage profiles image没有被发现 我尝试为该目录找到任何类型的路由 但未能成功 任何帮助 将不胜感激 您必须链接到存储
  • 转换匿名数组初始值设定项列表

    我可以成功地对 char 字符串数组进行初始化列表的 C 转换 但似乎无法使其与 C 转换 static cast 一起使用 int main char x test 123 This works fine char foo char a