假设我有这个功能:
void my_test()
{
A a1 = A_factory_func();
A a2(A_factory_func());
double b1 = 0.5;
double b2(0.5);
A c1;
A c2 = A();
A c3(A());
}
Run Code Online (Sandbox Code Playgroud)
在每个分组中,这些陈述是否相同?或者在某些初始化中是否有额外的(可能是可优化的)副本?
我见过有人说过这两件事.请引用文字作为证据.还请添加其他案例.
给出教程中的以下函数模板.
template<class T>
double GetAverage(T tArray[], int nElements)
{
T tSum = T(); // tSum = 0
for (int nIndex = 0; nIndex < nElements; ++nIndex)
{
tSum += tArray[nIndex];
}
// Whatever type of T is, convert to double
return double(tSum) / nElements;
}
Run Code Online (Sandbox Code Playgroud)
在线
T tSum = T(); // tSum = 0
Run Code Online (Sandbox Code Playgroud)
他们说它将调用特定类型的默认构造函数(基于我们称之为此函数的类型).我怀疑这个调用是如何将值赋给tSum的,因为这会调用构造函数.但由于构造函数不返回任何内容,iSum如何初始化为0表示int或0.0表示double.
这是我的面试问题:
int var = 1;
void main()
{
int i = i;
}
Run Code Online (Sandbox Code Playgroud)
i分配后的价值是多少?它真的是编译器依赖的还是仅仅是未定义的?我在cygwin上的g ++似乎总是给我0.
谢谢