Roh*_*hit 3 c++ boost boost-ref
我对boost :: ref的使用感到困惑.我不明白为什么任何人想要做以下事情 -
void f(int x)
{
cout << x<<endl;
x++;
}
int main(int argc, char *argv[])
{
int aaa=2;
f(boost::ref(aaa));
cout << aaa<<endl;
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
将ref传递给函数有什么用?我总是可以通过价值来代替.也不是说裁判实际上是通过了.在上面,主要的aaa值仅为2.
boost ref究竟在哪里有用?
在这种情况下是否可以使用boost :: ref.我想传递iterator引用std :: sort函数.通常这个排序适用于迭代器副本 - boost :: ref是否也适用于引用?(对std :: sort没有任何更改)
Mik*_*our 14
我不明白为什么任何人想要做以下事情
他们不会.这不是boost::ref
(或这些日子std::ref
)的目的.如果函数按值获取参数,则无法强制它通过引用取代它.
boost ref究竟在哪里有用?
它可以用来使函数模板的行为好像它通过引用接受一个参数,通过实例化参数(包装器)类型的模板,而不是值类型:
template <typename T>
void f(T x) {++x;}
f(aaa); cout << aaa << endl; // increments a copy: prints 0
f(ref(aaa)); cout << aaa << endl; // increments "a" itself: prints 1
Run Code Online (Sandbox Code Playgroud)
一个常见的特定用途是绑定函数的参数:
void f(int & x) {++x;}
int aaa = 0;
auto byval = bind(f, aaa); // binds a copy
auto byref = bind(f, ref(aaa)); // binds a reference
byval(); cout << aaa << endl; // increments a copy: prints 0
byref(); cout << aaa << endl; // increments "a" itself: prints 1
Run Code Online (Sandbox Code Playgroud)
是否可以在这种情况下使用boost:; ref.我想传递iterator引用std :: sort函数.通常这个排序适用于迭代器副本 - boost :: ref是否也适用于引用?
没有; 引用包装器不符合迭代器要求,因此您无法在标准算法中使用它.如果可以的话,如果他们需要制作独立的迭代器副本(许多算法,包括大多数sort
实现必须这样做),那么许多算法都会出现严重错误.
归档时间: |
|
查看次数: |
6838 次 |
最近记录: |