在上面的代码中,仙(7)将创建一个匿名对象初始化它美分,与7的值,然后摧毁它。在这样的背景下,这是不会做我们好。让我们看一个例子,它可以很好地加以利用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
class
Cents { private : int
m_nCents; public : Cents( int
nCents) { m_nCents = nCents; } int
GetCents() { return
m_nCents; } }; Cents
Add(Cents &c1, Cents &c2) { Cents
cTemp(c1.GetCents() + c2.GetCents()); return
cTemp; } int
main() { Cents
cCents1(6); Cents
cCents2(8); Cents
cCentsSum = Add(cCents1, cCents2); std::cout
<< "I
have "
<< cCentsSum.GetCents() << "
cents."
<< std::endl; return
0; } |
注意,这个例子是前一个使用整数非常相似。在这种情况下,我们的add()功能是构建一个短暂的ctemp变量,只作为一个占位符。我们也使用一个ccentssum变量main()。
我们可以通过匿名变量简化这一程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class
Cents { private : int
m_nCents; public : Cents( int
nCents) { m_nCents = nCents; } int
GetCents() { return
m_nCents; } }; Cents
Add(Cents &c1, Cents &c2) { return
Cents(c1.GetCents() + c2.GetCents()); } int
main() { Cents
cCents1(6); Cents
cCents2(8); std::cout
<< "I
have "
<< Add(cCents1, cCents2).GetCents() << "
cents."
<< std::endl; return
0; |
这个版本的add()功能相同的一个以上的,除了它使用匿名美分价值而不是一个命名变量。还注意到,在main(),我们不再使用命名ccentssum变量作为临时存储。相反,我们使用的返回值的add()匿名!
作为一个结果,我们的计划是短的,清洁的,和一般容易跟随(一旦你理解的概念)。
在C++中,匿名变量主要是用来传递或无需创建临时变量很多这样的返回值。然而,值得注意的是,匿名对象只能通过或返回值!如果一个变量被通过或通过引用或地址返回一个已命名的变量,而不是必须使用。另外值得注意的是,因为匿名变量表达的范围,如果您需要在多个表达式参考价值,你将不得不使用一个已命名的变量。