相关疑难解决方法(0)

关于在C/C++/Assembly中返回多个值

我已经阅读了一些关于返回多个值的问题,例如在C++和Java中只有一个返回值的原因什么?,从C++函数https://softwareengineering.stackexchange.com/questions/203471/why-do-most-programming-languages-only-support-returning-a-single-value-from-af 返回多个值.

我同意用于证明多个返回值不是绝对必要的大多数参数,我理解为什么没有实现这样的功能,但我仍然无法理解为什么我们不能使用多个调用者保存的寄存器例如ECX和EDX返回这样的值.

使用寄存器而不是创建一个Class/Struct来存储这些值或通过引用/指针传递参数不是更快,两者都使用内存来存储它们吗?如果可以做这样的事情,那么任何C/C++编译器是否都使用此功能来加速代码?

编辑:理想的代码是这样的:

(int, int) getTwoValues(void) { return 1, 2; }

int main(int argc, char** argv)
{
    (int a, int b) = getTwoValues();//a and b are actually returned in registers so future operations with a and b are faster
    //do something with a and b

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c c++ x86 assembly

4
推荐指数
1
解决办法
2244
查看次数

如何从c ++中的函数返回多个值?

我知道以前曾经问过,但我还是不知道怎么做.我必须写一个函数,它返回数组中出现的2,5和9的次数.

    include <iostream>

    int twofivenine(int array[], int n)
    {
        int i = 0;
        int num_2 = 0;
        int num_5 = 0;
        int num_9 = 0;

        for ( i = 0;  i < n; i++ ){
            switch(){
                case (array[i] == 2):
                    num_2++;
                case (array[i] == 5):
                    num_5++;
                case (array[i] == 9):
                    num_9++;
            }

        }

       return ;
    }


    int main()
    {
        int array[6] = {2,2,3,5,9,9};

        std::cout << "2: 5: 9:" << twofivenine(array, 6) << std::endl;
    }
Run Code Online (Sandbox Code Playgroud)

我只是不确定如何返回(num_2,num_5和num_9)

c++

4
推荐指数
1
解决办法
1582
查看次数

int foo(type&bar); 是一种不好的做法?

好吧,我们来了.我的C++书籍提出了另一个提议的做法.它说"返回值(非空)函数不应该将引用类型作为参数." 所以基本上如果你要实现这样的函数:

int read_file(int& into){
   ...
}
Run Code Online (Sandbox Code Playgroud)

并使用整数返回值作为某种错误指示符(忽略我们有异常的事实)然后该函数编写得很糟糕它实际上应该像

void read_file(int& into, int& error){

}
Run Code Online (Sandbox Code Playgroud)

现在对我来说,第一个更清晰,更好用.如果要忽略错误值,可以轻松完成.但是这本书暗示了后来的.请注意,本书并未说返回值函数是坏的.它宁愿说你应该只返回一个值,或者你应该只使用引用.

你对此有何看法?我的书上装满了废话吗?(再次)

c++ reference function

3
推荐指数
2
解决办法
404
查看次数

函数返回值与修改通过引用传递的值

在什么情况下最好返回一个对象而不是仅仅修改通过引用传递给该函数的对象?我怎么知道我应该选择哪一个?

实际上,问题是如果没有从函数返回对象的能力,而只能修改通过引用传递的对象,我是否无法做某些事情。

c++ choice return-value pass-by-reference

2
推荐指数
2
解决办法
1958
查看次数

返回多个值C++

有没有办法从函数中返回多个值?在我正在研究的程序中,我希望将4个不同的int变量返回到main函数,从单独的函数返回,继续通过程序所需的所有统计数据.我发现没办法真正做到这一点.非常感谢任何帮助,谢谢.

c++ variables return function

2
推荐指数
2
解决办法
2611
查看次数

如何从函数返回两个值?

如何设计一个函数原型,允许单个函数同时查找并返回数组中的最低值和最高值?谢谢.

c++ function function-prototypes

2
推荐指数
1
解决办法
1万
查看次数

为什么允许多变量返回语句?

简单地说,为什么以下代码编译?

#include<iostream>

int foo(){
    return 0,1;
}

int main(){
    int a,b = foo();
    std::cout << a << " " << b << std::endl;
    std::cout << foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用64位Window的机器,并使用Dev-C++进行编译(使用MinGW GCC 4.5.2 32位编译器).

此代码打印以下输出:

2686824 1
1
Run Code Online (Sandbox Code Playgroud)

我强烈怀疑包含的值a是存储在未初始化变量中的通常垃圾.

这个问题中可以清楚地看出,从函数中返回多个值并不是工业中常见的做法,并且在学术机构教授的编程课程中肯定会受到劝阻和惩罚.

那它为什么有效呢?由于我已经成熟为程序员,我已经意识到编译器错误的难以置信的价值,它比链接器或运行时错误更容易理解,并且显然比错误更好.

为了清楚起见,我更感兴趣的是为什么从语言设计的角度来看这是允许的,而不是编译器如何做其事情的技术细节(除非,在这种情况下,实现现实或技术后果使其变得困难/无法检测/管理多个return变量).

是否有一些深奥的案例,其中多变量return法令被认为是有用的?

c++

1
推荐指数
1
解决办法
188
查看次数

从函数中获取多个值

可能重复:
从C++函数返回多个值

/************************************************/
/* Name: premserv                               */
/* Description: Calculations for premium serv   */
/* Parameters: N/A                              */
/* Return Value: premserv                       */
/************************************************/

float premserv ()
{
  int daymin = 0;         //Var for day minutes
  int nightmin = 0;       //Var for night minutes
  float daytotal = 0;     //Var for day total
  float nighttotal = 0;   //Var for night total
  float premserv = 0;     //Var for premium service cost

  cout << "\n" << "Please enter the number of minutes used …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
208
查看次数

如何用函数原型返回多个参数

定义只返回y参数,我只是学习函数原型

#include <iostream>
using namespace std;

    int doDateofBirth(int m , int d , int y);

    int main(){

        cout << "My DoB is, " << doDateofBirth(4,14,1998) << endl;


    }

    int doDateofBirth(int m,int d,int y){
        return m,d,y;
    }
Run Code Online (Sandbox Code Playgroud)

c++ function

0
推荐指数
1
解决办法
149
查看次数