【问题标题】:Boolean function布尔函数
【发布时间】:2013-05-06 22:31:03
【问题描述】:

我正在尝试使用 find_if 布尔函数在以下情况下返回 true:

  1. Z 为 =
  2. name="john"(全部小写)

我的代码:

/* predicate for find_if */
bool exam_pred(const exam_struct &a)
{
  if ((a.Z=<10)&&(a.name="john")) 
  {
     return true;
  }   
}

exam_struct{
  int x,y;
  double Z;
  string name;
};

当我设置a.name="john" 时它不会编译。所以我的问题是如何将a.name="john"; 实现到我的布尔值中?

【问题讨论】:

  • 警告。并非所有控制路径都返回值...
  • 当你对其他程序员说“它不编译”时,这类似于去看医生并说“有些疼”。具体一点,分享你遇到的错误。
  • @ArmenTsirunyan 虽然是有效注释,但根据编译器设置只会给出警告或通知,并回退到默认返回值0,相当于false。因此它不会破坏代码。
  • @Niels 你错了。无法从具有非 void 返回类型(main 除外)的函数返回值是未定义的行为。
  • 有趣的是,我不得不努力寻找standards-quoting source,但你是对的。我很确定大多数编译器将其默认为 0(可能仅在调试版本中),但实际上 TS 应该在 exam_pred 函数的末尾显式地 return false 。反正为你 +1 嘿嘿。

标签: c++ string function struct boolean


【解决方案1】:

您确实应该使用== 运算符。

我之前建议 strcmp 是错误的,因为您使用的是字符串。

代码:

struct exam_struct {
    int x, y;
    double Z;
    string name;
};

/* predicate for find_if */
bool exam_pred(const exam_struct& a)
{
    return a.Z <= 10 && a.name=="john";
}

请注意,在您的原始代码中,当检查为 false 时,您不会返回 false

【讨论】:

  • strcmp 在std::string 上不起作用(除非你使用a.name.c_str(),瑞典谚语所说的“过河取水”。
  • @MatsPetersson 已经解决了这个问题。我没有仔细阅读问题。
  • @0x499602D2 要解释一下吗?
  • @Elazar = 是赋值,你的意思可能是==
  • 哇 == 运算符修复了它。我花了一整天的时间在我的 c++ final 上试图完成这个并且看不到那个错误。谢谢大家
【解决方案2】:

= 是赋值运算符。使用== 进行相等比较。而较小或等于运算符是&lt;=,而不是=&lt;

【讨论】:

  • 不是在 C 字符串的情况下,它是一个 identity 比较。
  • 由于结构是通过 const 引用传递的,这是 C++(C 没有引用),因此可以安全地假设字符串是 std::string
  • 是的,TS应该已经标记了,我在仔细检查后自己添加了C++标记嘿嘿。
  • "我认为它是 C 字符串出于某种原因" -- 没有 C 字符串这样的东西。
  • @JimBalter 可能指的是char*,因此在某种程度上它确实是一种身份比较。
猜你喜欢
  • 2011-10-17
  • 2012-01-23
  • 2011-11-05
  • 2015-10-07
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多