在另一个语句中创建一个变量

时间:2015-06-30 18:23:31

标签: c++

有没有办法在参数列表范围内分配变量?使用new我们可以执行以下操作:

Class A{ /*... snip ...*/ };

void myFunc(A* a){ }

int main(...){
    myFunc(new A());
    return 0;
}

这将创建一个新的A.如果myFunc的签名是

,该怎么办?
void myFunc(A a);

代替。是否有在myFunc()参数列表中创建本地实例的语法?我正在寻找像

这样的东西
myFunc(A());

myFunc(A a());

另一种用途是:

A a(123);
if(a == A(123)){ }

净效果是保存一行,但它也会在参数列表中创建一个范围,这让我想知道它是否被允许。

2 个答案:

答案 0 :(得分:1)

如果您只是想创建一个传递给该函数的变量,可以使用aggregate initialization / list initialization

#include <iostream>
#include <cmath>
using namespace std;

class A{ /*... snip ...*/ };

void myFunc(A a){ }

int main(){
    myFunc(A{});
    return 0;
}

Live Example

您也可以将此用于具有带多个参数的构造函数的类

#include <iostream>
#include <cmath>
using namespace std;

class A
{ 
private:
    int foo;
    int bar;
    double foobar;
public:
    A(int a, int b, double c) : foo(a), bar(b), foobar(c) {}

};

void myFunc(A a){ }

int main(){
    myFunc(A{1,2,3.0});
    return 0;
}

Live Example

答案 1 :(得分:1)

C ++支持您在问题中提出的myFunc(A());语法。

#include <stdio.h>

char lazybuff[500];

class Point
{
  public:
    Point (double x, double y) : m_x(x), m_y(y) { }
    char * ToString (void) { sprintf (lazybuff, "%f, %f", m_x, m_y); return lazybuff; }

  private:
    double m_x, m_y;
};

void print_point (Point print_me)
{
  printf ("%s\n", print_me.ToString());
}

int main (void)
{
  print_point (Point(5, 3));

  return 0;
}