错误:“const char [35]”和“const char [2]”类型的操作数对二进制“operator+”无效

2023-11-27

在我的文件顶部有

#define AGE "42"

稍后在文件中我多次使用 ID ,包括一些看起来像这样的行

std::string name = "Obama";
std::string str = "Hello " + name + " you are " + AGE + " years old!";
str += "Do you feel " + AGE + " years old?";

我收到错误:

“错误:‘const char [35]’和‘const char [2]’类型的操作数对二进制‘operator+’无效”

在第 3 行。我做了一些研究,发现这是因为 C++ 处理不同字符串的方式,并且能够通过将“AGE”更改为“string(AGE)”来修复它。然而,直到今天我不小心错过了其中一个实例,并且想知道为什么编译器没有抱怨,即使我仍然有一个只是“AGE”的实例。

通过一些试验和错误我发现我只需要string(AGE)在我不连接函数体中创建的另一个字符串的行上。

我的问题是“C++ 不喜欢将字符串与预处理器放在那里的字符串连接起来,除非您也连接在函数中定义的字符串,否则在后台发生了什么。”


考虑一下:

std::string str = "Hello " + "world"; // bad!

rhs 和 lhs 都为operator + are char*s。没有定义operator +这需要两个char*s (事实上,该语言不允许您编写一个)。结果,在我的编译器上,这会产生“无法添加两个指针”错误(您的编译器显然是用数组来表达事物,但这是同样的问题)。

现在考虑一下:

std::string str = "Hello " + std::string("world"); // ok

There is的定义operator +这需要一个const char*作为 lhs 和 astd::string作为rhs,所以现在大家都很高兴。

您可以将其扩展到您喜欢的任意长的串联链。但它可能会变得混乱。例如:

std::string str = "Hello " + "there " + std::string("world"); // no good!

这不起作用,因为你正在尝试+ two char*lhs 转换为之前的 sstd::string。但这很好:

std::string str = std::string("Hello ") + "there " + "world"; // ok

因为一旦你转变为std::string, 你可以+尽可能多的额外char*如您所愿。

如果这仍然令人困惑,添加一些括号来突出显示关联性规则,然后用变量的类型替换变量名可能会有所帮助:

((std::string("Hello ") + "there ") + "world");
((string + char*) + char*)

第一步是调用string operator+(string, char*),这是在标准库中定义的。将这两个操作数替换为它们的结果给出:

((string) + char*)

这正是我们刚刚所做的,而且仍然合法。但尝试同样的事情:

((char* + char*) + string)

你被困住了,因为第一个操作试图添加两个char*s.

这个故事的寓意:如果您想确保串联链能够正常工作,只需确保前两个参数之一的类型明确即可std::string.

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

错误:“const char [35]”和“const char [2]”类型的操作数对二进制“operator+”无效 的相关文章

  • 在两个 .cpp 文件之间定义全局变量 [重复]

    这个问题在这里已经有答案了 如何在 A cpp 和 B cpp 之间共享 全球化 bool 变量 其中它们都不包含其他 h 文件 他们有其他联合头文件 但彼此没有 我可以在这些共享标头中定义全局变量吗 Thanks 我可以在这些共享标头中定
  • 实体框架中的重复键异常?

    我试图捕获当我将具有给定用户名的现有用户插入数据库时 引发的异常 正如标题所说 我正在使用 EF 当我尝试将用户插入数据库时 引发的唯一异常是 UpdateException 如何提取此异常以识别其是否是重复异常或其他异常 catch Up
  • C/C++ 中随机数生成器的实现[重复]

    这个问题在这里已经有答案了 我对 C 中随机数生成器的实现有点困惑 它也与 C 中的明显不同 如果我理解正确 对 srand seed 的调用会以某种方式初始化可通过 rand 访问的隐藏变量 种子 该变量又将函数指向预先生成的序列 例如例
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • 如何在 C++ 的子目录中创建文件?

    这是我的代码 如何在子目录联系人中创建文件 每次创建该文件时 它都会出现在与我的程序相同的目录中 int main ofstream myfile contacts myfile open a myfile close 在构造函数中指定完整
  • Windows 程序如何临时更改其时区?

    我写了一个函数来返回time t与给定日期的午夜相对应的值 当给定日期没有午夜时 它返回最早可用的时间 例如 当埃及进入夏令时时 这种情况就可能发生 今年 时间更改于 4 月 29 日晚上午夜生效 因此时钟直接从 23 59 转到 01 0
  • 从 ef core 的子集合中删除一些项目

    我有一个父表和子表 其中父表与子表具有一对多关系 我想删除一些子项 并且希望父项的子集合反映该更改 如果我使用删除选定的子项RemoveRange 那么子集合不会更新 如果我使用Remove从子集合中删除子集合然后 显然 它不如使用效率高R
  • python 中的 F 字符串前缀给出语法错误[重复]

    这个问题在这里已经有答案了 我有一个名为 method 的变量 它的值是 POST 但是当我尝试运行时print f method method is used 它不断在最后一个双引号处给出语法错误 我找不到它这样做的原因 我正在使用 py
  • fscanf 和 EOF 中的否定扫描集

    我的文件中有一个以逗号分隔的字符串列表 姓名 1 姓名 2 姓名 3 我想跳过所有逗号来阅读这些名字 我写了以下循环 while true if fscanf file my string 1 break 然而 它总是比预期多执行一次 给定
  • 停止 TcpListener 的正确方法

    我目前正在使用 TcpListener 来处理传入连接 每个连接都有一个线程用于处理通信 然后关闭该单个连接 代码如下 TcpListener listener new TcpListener IPAddress Any Port Syst
  • 检索 Autofac 容器以解析服务

    在 C WindowForms 应用程序中 我启动一个 OWIN WebApp 它创建另一个类 Erp 的单例实例 public partial class Engine Form const string url http 8080 49
  • 如何在Linux上构建GLFW3项目?

    我已经使用 cmake 和 make 编译了 glfw3 和包含的示例 没有出现任何问题 开始编写我的第一个项目 作为 opengl 和 glfw 的新手 并且对 C 和 CMake 没有经验 我正在努力理解示例构建文件 甚至要链接哪些库和
  • 获取大于某个数字的元素个数

    我正在尝试解决以下问题 数字被插入到容器中 每次插入数字时 我需要知道容器中有多少元素大于或等于当前插入的数字 我相信这两个操作都可以以对数复杂度完成 我的问题 C 库中有标准容器可以解决这个问题吗 我知道std multiset可以在对数
  • 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

    我有一个继承自基类模板的类模板 基类模板有一个数据成员和一个成员函数模板 我想从我的超类中调用它 我知道为了消除对成员函数模板的调用的歧义 我必须使用template关键字 我必须明确引用this在超级班里 this gt base mem
  • 编译器什么时候内联函数?

    在 C 中 函数仅在显式声明时才内联inline 或在头文件中定义 或者编译器是否允许内联函数 因为他们认为合适 The inline关键字实际上只是告诉链接器 或告诉编译器告诉链接器 同一函数的多个相同定义不是错误 如果您想在标头中定义函
  • 计算两个日期之间的工作日数?

    在C 中 如何计算business 或工作日 两个日期之间的天数 我以前曾经遇到过这样的任务 并且我已经找到了解决方案 当可以避免的时候 我会避免列举其间的所有日子 这里就是这种情况 正如我在上面的一个答案中看到的那样 我什至没有提到创建一
  • 网页执行回发时如何停止在注册表单上?

    我正在做我的最后一年的项目 其中 我在一页上有登录和注册表单 WebForm 当用户点击锚点时Sign Up下拉菜单ddlType 隐藏 和文本框 txtCustName txtEmail and txtConfirmPassword 显示
  • 请解释为什么Java和C对此代码给出不同的答案

    public class Test public static void main String args int i 10 i i System out println value of i is i 输出是 10 当我在中执行类似的代码
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route
  • C# 中成员访问中的问号是什么意思?

    有人可以向我解释一下以下代码中会员访问中的问号是什么意思吗 它是标准 C 的一部分吗 尝试在 Xamarin Studio 中编译此文件时出现解析错误 this AnalyzerLoadFailed Invoke this new Anal

随机推荐

  • Spring-JDBC 中的隔离级别 SERIALIZABLE

    也许有人可以帮助我解决 Spring 3 1 Postgresql 8 4 11 中的事务问题 我的交易服务如下 Transactional isolation Isolation SERIALIZABLE readOnly false O
  • justify content 的默认值是多少?

    MDN 的默认值为证明内容合理 as normal但这没有列在可接受的值列表中 什么是normal value normal这些物品都按照默认位置包装 就好像没有一样 justify content 值已设置 该值表现为网格中的拉伸 和柔性
  • android MVP - 我可以有多个演示者来自定义视图和片段吗

    所以我有一个已经与某项活动相关联的演示者 这本书说 一位演讲者应该与一种观点联系在一起 但现在我添加了一些片段和大量自定义视图 我也认为片段是一个视图 自定义视图将包含一些逻辑 当然 片段和自定义视图都包含在我的活动中 我的问题是 我应该在
  • AlertDialog 的浅色主题?

    我正在创建一个 AlertDialog 我正在使用 setView 设置自定义视图 这将在对话框上启用 深色 主题 灰色背景 并且需要白色文本 有没有办法将对话框设置为使用 浅色 主题 它看起来更好 白色背景 深色文本 Thanks 我采取
  • 如何使 JFrame 背景和 JPanel 透明,仅显示图像

    嘿 我正在尝试制作某种启动器 窗口 必须是透明的 因为我希望我使用的图像成为它的设计 如果你明白我的意思的话 我尝试做setUndecorated true and setBackground new Color 0 0 0 0 但它看起来
  • 如何通过 Paperclip + S3 使用种子数据

    我正在尝试使用会员个人资料以及 S3 和回形针的会员个人资料图片为我的数据库添加种子 但它似乎不起作用 我可以在应用程序中创建 编辑现有成员 以使用回形针 S3 添加图片 它工作得很好 但播种却不起作用 我已经搜索过但找不到答案 我不知道你
  • F# 将 Array2 转换为列表

    我对函数式编程还是个新手 所以如果我不知道如何做某事 我就会回到过程式风格 我找到了一种方法来避免转换为列表 但我仍然想知道如何进行 这是我将二维数组转换为列表的尝试 let board Array2 init 10 20 fun i j
  • 如何设置 Android Studio 以完全离线工作?

    我的带宽非常慢 因此我尝试将所有必需的文件保留在本地计算机上 以便完全离线使用 Android Studio 当我单击 新项目 时 它总是尝试下载名为gradle 1 6 bin zip我下载并尝试通过插件管理器在本地安装 但它给了我一个错
  • 不同上下文中对象之间的非法关系:但我只有一个上下文?

    我收到以下错误 NSInvalidArgumentException 原因 非法企图建立一个 之间的关系 条件 不同上下文中的对象 当运行我的 iPhone 应用程序时 我的模型的相关部分如下所示 AssessmentTree has on
  • 为什么C中的一个printf()不能同时打印两个64位值?

    我正在 32 位系统上工作 当我尝试在单个 printf 中打印多个 64 位值时 它无法打印任何其他 即第二个 第三个 变量值 example uint64 t a 0x12345678 uint64 t b 0x87654321 uin
  • has_many :通过问题

    我之前使用的是 has and belongs to many 现在已转换为 has many through 以下是它如何查找可以有许多用户玩的游戏列表 有了这个 我可以做 game users 和 user games class Ga
  • 通过选择“property”属性获取“Meta”属性“content”

    在 jQuery 中你可以这样做 meta property fb app id attr content 这会给你content属性值来自meta 标记为property属性 fb app id 我怎样才能用普通的 Javascript
  • PHP Date - 如何添加字符串来分隔日期和时间

    我想显示类似这样的日期和时间格式 May 23 at 12 30pm 我在PHP手册中看到 Prints something like Monday 8th of August 2005 03 12 46 PM echo date l jS
  • 如何使用 Django 显示用户个人资料?

    我是 django 的新手 目前正在尝试构建一个允许用户登录并查看其他用户个人资料的网站 到目前为止 我已经设法让用户登录 但我不知道如何查看其他人的个人资料 每个个人资料都使用用户的用户名为其个人资料创建一个 URL 目前 如果我以一个用
  • Spring 4 WebSocket 应用程序

    我尝试从 spring 站点运行这个示例 tutorial除了 Spring Boot 部分 Web xml
  • C 和 C++ 中字符串文字连接的实现

    AFAIK 这个问题同样适用于C and C 中指定的 翻译阶段 的步骤 6C标准 C99 标准草案中的 5 1 1 2 规定相邻字符串文字必须连接成单个文字 I e printf helloworld c d Hello world n
  • Eclipse:在 Eclipse 中安装插件时出现错误,无法找到 jar 文件

    我正在关注以下网站http visualvm java net eclipse launcher html用于将 VisualVM 安装到 Eclipse Helios Version 3 6 中 为此 如上所述 我下载了 VisualVM
  • 如何使用捏缩放(UIPinchGestureRecognizer)来更改 UITextView 的宽度?

    我可以得到UIPinchGestureRecognizer处理程序来缩放对象 但我不想缩放 我想更改大小 例如我有一个UITextView我附上了一个UIPinchGestureRecognizer向它做手势 如果用户捏合我想更改文本视图的
  • 没有具有域权限的应用程序

    我正在尝试通过通用链接集成深度链接 一切都在开发者帐户上顺利解决 关联的域也在应用程序 ID 上启用 在服务器端 myapp com apple app site association 可用 但苹果搜索验证器总是抛出此错误 我不确定这到底
  • 错误:“const char [35]”和“const char [2]”类型的操作数对二进制“operator+”无效

    在我的文件顶部有 define AGE 42 稍后在文件中我多次使用 ID 包括一些看起来像这样的行 std string name Obama std string str Hello name you are AGE years old