我已经使用std::move和std::forwardC++中.我的问题是:这些功能如何通过标准库实际实现?
如果左值是你可以获得的地址,而右值绝对不是左值,你怎么能实际实现这些引用呢?
这些新设施是否允许以下内容:
auto x = &(3);
Run Code Online (Sandbox Code Playgroud)
或类似的东西?你能获得一个不仅仅是std::move/ forward返回左值的右值的引用吗?
希望这些问题有意义.我无法在Google上找到有关完美转发的教程,等等.
我有一个带字符串向量的函数,我在向量中有一系列字符串向量.
我想循环遍历将每个字符串向量传递给新线程的向量.
for (vector<vector<string> >::iterator it = vecstringvec.begin() ;
it != vecstringvec.end(); ++it){
threadvector.push_back(thread(func, *it));
}
Run Code Online (Sandbox Code Playgroud)
基本上是上面的,除了上面的不起作用(编译错误).我相信我需要一个传递的std :: ref来传递,但我不确定,或者如何使用迭代器来做到这一点.
完整错误:
/usr/include/c++/4.8/functional: In instantiation of ‘struct std::_Bind_simple<void (*(std::vector<std::basic_string<char> >, std::reference_wrapper<std::vector<std::basic_string<char> > >))(std::vector<std::basic_string<char> >&, std::vector<std::basic_string<char> >&)>’:
/usr/include/c++/4.8/thread:137:47: required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(std::vector<std::basic_string<char> >&, std::vector<std::basic_string<char> >&); _Args = {std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::reference_wrapper<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >}]’
prog.cpp:199:55: required from here
/usr/include/c++/4.8/functional:1697:61: error: no type named …Run Code Online (Sandbox Code Playgroud) 我正在使用代码将一些整数转换为浮点数来进行除法.
size_t a;
uint8_t b, c;
a = (float)b / (float)c;
Run Code Online (Sandbox Code Playgroud)
我正在编译启用警告标志,我得到一个'老演员'.有没有更好或更好的方法来铸造这些东西?如果是这样,怎么样?
我有一个字符串向量的向量.这些向量中的第二个字符串是我想要排序的.有没有办法使用std :: sort来做到这一点?
从我可以告诉我应该传入一个struct/class中的函数,但我不确定它应该是什么样子.