有没有办法在参数列表范围内分配变量?使用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)){ }
净效果是保存一行,但它也会在参数列表中创建一个范围,这让我想知道它是否被允许。
答案 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;
}
您也可以将此用于具有带多个参数的构造函数的类
#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;
}
答案 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;
}