【问题标题】:getting dummy value in C++ code rather than expected value在 C++ 代码中获取虚拟值而不是期望值
【发布时间】:2019-07-03 18:52:37
【问题描述】:

我无法理解为什么我的代码会为我提供一些虚拟值。

有人可以帮我找出我的错在哪里,原因是什么?

#include <stdio.h>
#include <iostream>

class mypair
{
public:
    int a,b;

public:

    int print (int first , int second)
    {
        a = first;
        b = second;
        std::cout<<a <<" hello "<<b;
    }

    int getmax();
};

int mypair ::getmax()
{
    int res;
    res = (a>b)?a:b;
    std::cout<<res;
    return res;
}

int main ()
{
    mypair abc;

    std::cout<<abc.print(5,6);
    std::cout<<abc.getmax();
}

【问题讨论】:

  • 你应该打开你的编译器警告。它会告诉您,您不会从 mypair::print() 返回任何东西,但您应该返回 int
  • 5 你好 6629564866
  • 除了答案,您将打印最大数量两次。尝试自己调试它:)

标签: c++ eclipse iostream


【解决方案1】:

print() 不返回任何值,但预计会返回 int。这是 UB,您的虚拟值是由此引起的。

此外,在print()getmax() 中,您都将输出发送到cout。在getmax() 的情况下,此输出将立即先于返回值的输出,导致相同的数字显示两次,没有任何空格或分隔符。

【讨论】:

  • @john 将 print() 的类型设为 void 而不是 int
  • @Rietty 这是一个非常合理的选择。但是之后他就不能再用它作为cout的表达方式了。
  • @Rietty 非常感谢,但如果我将 print() 设置为 void,那么我将无法得到错误的答案:void value not ignored as it should be
  • @john 确实!但我认为 Rietty 想说的是函数的名称 print() 表明它被直接调用以打印某些内容,而不在 cout 表达式中使用它。
  • @Christophe 非常感谢。我明白了,但是如果我将 print() 函数的名称更改为其他名称,仍然会提供虚拟值。如果我创建构造函数而不是打印函数,我可以解决这个问题,这样我就可以获得确切的值,但我仍然感到困惑的是,为什么使用现有方法我会遇到传递虚拟值的问题。
猜你喜欢
  • 2013-09-04
  • 2018-06-19
  • 2021-10-28
  • 2012-03-06
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多