- 论坛徽章:
- 2
|
回复 #31 w_anthony 的帖子
我就缺vc7 …… vc10都有, 只是不常用……
感觉它是一个过度版本, 用户不如vc6广, 对标准支持度又不如vc8以后的版本……
支持谁其实不重要, 就像你说的, 人总是会犯错的。
所以, 我选择支持真理, 即使是在当前认知条件下狭隘的真理。
并且, 使用指针并不一定会产生高效代码。 但使得代码变得难看是肯定的。
例如, 不能很自然的这么写:
point p = make_point(x, y);
而是要分为2步:
point p;
make_point(&p, x, y);
呃, 我觉得后者不自然…… 这个是口味问题。
就效率来说:
T make_T( parameter ) {
return T( arguments ); // 一个构造函数
}
那么:
T v = make_T(arguments );
有可能就是:
T v; // 没有初始化
new (&v) T(arguments); // 一次初始化
这是具名返回值优化。 可以直接将返回值, 替换为函数中的具名返回对象。
而这个返回值, 在调用前是一个没有初始化的对象 —— 整个调用正好是它的初始化。
如果显示的使用指针(或者引用)
void make_T(T* t, parameter ) {
*t = T(parameter) ; // 一次构造, 一次拷贝
}
T v; // 传递之前, 还有一次默认构造
make_T(&t, arguments);
无论编译器能对这种代码优化到什么程度, 它的语意和上面是不同的, 语意上始终要多1次默认构造和拷贝。
[ 本帖最后由 OwnWaterloo 于 2010-1-27 00:25 编辑 ] |
|