gpt4 book ai didi

c++ - 赋值给枚举 - c/c++ 中需要左值

转载 作者:行者123 更新时间:2023-11-30 21:34:57 25 4
gpt4 key购买 nike

当我把双手绑在enum上时,我发现:

  1. enum 不能分配任何文字(即使是整型)。

    enum sign{alpha,beta};
    alpha=4; //error: lvalue required as left operand of assignment

关于这一点,我无法理解 enum 为什么不是左值,因为它有一个名称(标识符)。

  • C++ Primer中已经给出:
  • An object of enumeration type may be initialized or assigned only by one of its enumerators or by another object of the same enumeration type.

    它还在一个示例中显示:

    enum p1{var1A,var1B};
    enum p2{var2A,var2B};

    var2A=var1A //Error: var2A is not a p2 enumerator -> as written in the book
    var2A=var2B //Correct as per the book

    但是为什么在分配正确值时我得到的只是与1点中显示的相同的lvalue错误。

    最佳答案

    仅仅因为某个东西有名字,并不意味着它是一个左值。比这更复杂。例如,类型有名称,但它们根本不是值!您可能正在考虑使用变量名称的表达式,这些变量往往是左值。但枚举数不是变量。

    枚举数不仅是常量,而且还是纯右值,因此错误消息不仅正确,而且措辞也正确。

    您可以阅读 value categories on cppreference.com .

    如果你的书说var2A=var2B是有效的,你就需要一本新书,因为那是无稽之谈。但引用的段落并不支持你的主张。这意味着您可以创建一个新的 sign 并从任何这些枚举中初始化它,例如 sign mySign = var2A;

    关于c++ - 赋值给枚举 - c/c++ 中需要左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54062186/

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