s*****k 发帖数: 604 | 1 为什么有的函数声明了参数类型但是没用变量名呢?
比如这段代码
template
inline _Tp* allocate(ptrdiff_t __size, _Tp*) {
set_new_handler(0);
_Tp* __tmp = (_Tp*)(::operator new((size_t)(__size * sizeof(_Tp))));
if (__tmp == 0) {
cerr << "out of memory" << endl;
exit(1);
}
return __tmp;
}
那个 _Tp* 后面就没有跟变量名 |
c*****t 发帖数: 1879 | 2 Not used.
【在 s*****k 的大作中提到】 : 为什么有的函数声明了参数类型但是没用变量名呢? : 比如这段代码 : template : inline _Tp* allocate(ptrdiff_t __size, _Tp*) { : set_new_handler(0); : _Tp* __tmp = (_Tp*)(::operator new((size_t)(__size * sizeof(_Tp)))); : if (__tmp == 0) { : cerr << "out of memory" << endl; : exit(1); : }
|
s*****k 发帖数: 604 | 3 不用干吗把函数声明称那个样子?
输入一个参数不就行了?
难道是为了符合标准吗?
【在 c*****t 的大作中提到】 : Not used.
|
S*********g 发帖数: 5298 | 4 But the type of the second parameter is used
【在 s*****k 的大作中提到】 : 不用干吗把函数声明称那个样子? : 输入一个参数不就行了? : 难道是为了符合标准吗?
|
s*****k 发帖数: 604 | 5 you don't have to declare the type in the parameter list
to use it 吧
【在 S*********g 的大作中提到】 : But the type of the second parameter is used
|
t****t 发帖数: 6806 | 6 on the contrary, you have to declare the type of parameter list in c++,
because the type is actually a part of the function name. although you don't
have to declare the name in the parameter list, as you have already seen.
【在 s*****k 的大作中提到】 : you don't have to declare the type in the parameter list : to use it 吧
|
s*****k 发帖数: 604 | 7 template
inline _Tp* allocate(ptrdiff_t __size)
{
set_new_handler(0);
_Tp* __tmp = (_Tp*)(::operator new((size_t)(__size * sizeof(_Tp))));
if (__tmp == 0)
{
cerr << "out of memory" << endl;
exit(1);
}
return __tmp;
}
你说的没错但是把第二个参数去掉在这里是没问题的。
上面这段代码编译没问题的。
看看和我原来贴出来的有什么不同,
就是把第二个参数去掉了。
我想了想应该是 template instantilization 时候用到了第二个参数。
比如 _Tp = int
原来的那个模板函数用的只要 allocate(10, (int*)NULL)就可以
正确instantilize了
没有第二个参数的话就要这样用: allocate(10)
't
【在 t****t 的大作中提到】 : on the contrary, you have to declare the type of parameter list in c++, : because the type is actually a part of the function name. although you don't : have to declare the name in the parameter list, as you have already seen.
|
o*********e 发帖数: 13 | 8 usually when you know you have a parameter not used for current version but
would be used later, you'd like to include that parameter in the function
declaration by doing like this "Type /*var*/". In that case, you make sure
that var will not be used in current version. When you go to next version
just un-comment var and you are good to go. The important is that interface
is not changed.
【在 s*****k 的大作中提到】 : 不用干吗把函数声明称那个样子? : 输入一个参数不就行了? : 难道是为了符合标准吗?
|