【问题标题】:Can I use non-default datatype as argument for functions in 1 line?我可以在 1 行中使用非默认数据类型作为函数的参数吗?
【发布时间】:2013-08-22 06:34:22
【问题描述】:

我认为问题的标题有点混乱,所以我会解释一下。

让我们看看这个非常简单的代码。

#include <iostream>

class C {
public:
    int val;

    C(){
        val = 2;
    }

    void changeVal(int i){
        val = i;
    }

};

void printout(int val){
    std::cout << "int val : " << val << std::endl;
}

void printout(C c){
    std::cout << "class val : " << c.val << std::endl;
}

int main()
{
    C c;
    printout(1);
    printout(c);    

    //printout(C());    // ok, I can understand it.
    //printout(C().changeVal(0)); /// ?????
    return 0;
}

如您所见,函数 'printout' 用于打印输入参数。 我的问题是,当我使用 int 值(默认数据类型)时,我只需输入函数实数'1',但是,当我使用我的类实例('class C')时,我必须声明我的类函数之前的实例。

那么,有没有办法让这种 1 行中的函数参数的非默认数据类型

实际情况是,我必须使用 4x4 矩阵作为某些函数的参数。 出于这个原因,我必须制作一些矩阵,并对其进行初始化(使其为零)并使用它。 但如果我能用 1 行代码完成同样的工作,我的源代码会比现在更清晰。

这是我的问题。我希望你能理解我的问题。谢谢。

【问题讨论】:

  • 我删除了 C 标签。使用class&lt;iostream&gt; 意味着这个问题只涉及C++
  • 你的意思是你能做到吗printout(C())
  • 顺便说一句,不确定“默认数据类型”是什么意思,“内置语言数据类型/原始类型”会更好
  • @simonc 感谢您的指导。我不熟悉这个系统
  • @KarthikT 哦,这种表示方式要好得多。谢谢。

标签: c++ function arguments


【解决方案1】:

你可以通过一个临时的:

printout(C());

请注意,由于您不需要 C 参数的副本,因此通过 const 引用传递它会更有意义:

void printout(const C& c) { ... }

【讨论】:

  • 感谢您的回答。然后我想再问一个问题。我可以使用我的成员函数以类似的方式进行初始化吗?
  • 我添加了“changeVal”功能。我想将我的成员变量 'val' 初始化为 0,然后我将使用 'changeVal' 函数。我可以在 1 行中为函数参数完成这项工作吗?
  • @CIMPLE 如果要将val 初始化为0,则无需调用changeVal。您可以像这样编写默认构造函数:C() : val(0) {} 甚至 C() : val() {}
  • 感谢您的评论。
猜你喜欢
  • 1970-01-01
  • 2018-01-21
  • 2012-07-25
  • 2020-09-05
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
相关资源
最近更新 更多