下面的链接提供了4种forms的引用崩溃(如果我是正确的,这些是唯一的4种forms): http : //thbecker.net/articles/rvalue_references/section_08.html 。 从链接: A&&成为A& A &&&成为A& A &&&成为A& A && &&变成A && 虽然我可以做出一个有教养的猜测,但我想简要解释一下这些参考折叠规则背后的基本原理。 一个相关的问题,如果我可能:在典型的现实世界中,这些引用崩溃规则是由C ++ 11在内部被诸如std::move() , std::forward()类的STL实用程序使用用例? (注意:我具体询问在C ++ 11中是否使用引用合并规则,而不是C ++ 03或更早版本)。 我问这个相关的问题,因为我知道这样的C + + 11实用程序作为std::remove_reference ,但我不知道是否引用相关的工具,如std::remove_reference在C + + 11中经常使用,以避免需要用于引用合拢规则,或者它们是否与引用合拢规则一起使用 。
我重载了operator << template <Typename T> UIStream& operator<<(const T); UIStream my_stream; my_stream << 10 << " heads"; 作品,但是: my_stream << endl; 给汇编错误: 错误C2678:二进制'<<':找不到操作符findtypes为'UIStream'的左手操作数(或没有可接受的转换) 什么是使my_stream << endl工作的工作?
在这篇文章的评论部分有一个关于使用std::vector::reserve()和std::vector::resize()的线程。 这是原始代码: void MyClass::my_method() { my_member.reserve(n_dim); for(int k = 0 ; k < n_dim ; k++ ) my_member[k] = k ; } 我相信要写vector元素,正确的做法是调用std::vector::resize() ,而不是std::vector::reserve() 。 事实上,以下testing代码在VS2010 SP1的debugging版本中“崩溃”: #include <vector> using namespace std; int main() { vector<int> v; v.reserve(10); v[5] = 2; return 0; } 我是对的,还是我错了? 和VS2010 SP1是对的,还是错了?
我想问一下有效的C ++中的一个特定的问题。 它说: 如果一个类需要像一个多态类一样行为,那么析构函数应该是虚拟的。 它进一步补充说,由于std::string没有虚拟析构函数,所以不应该从它派生出来。 另外std::string甚至没有被devise成基类,忘记了多态基类。 我不明白在一个类中需要什么具体的基础类(不是多态的)? 是不是从std::string类派生的唯一原因是它没有虚拟析构函数? 为了可重用性,可以定义一个基类,并且多个派生类可以inheritance它。 那么是什么让std::string甚至没有资格作为基类? 另外,如果有一个纯粹定义为可重用目的的基类,并且有许多派生types,是否有任何方法来阻止客户端执行Base* p = new Derived()因为这些类不意味着被多态使用?
我正在查看STL容器,并试图确定它们究竟是什么(即使用的数据结构),并且deque阻止了我:我首先想到它是一个双链表,它允许从两端插入和删除时间不变,但是我对运营商做出的承诺感到不安, 在链表中,任意访问应该是O(n),对不对? 如果它是一个dynamic数组,它如何在常量时间内添加元素 ? 应该指出,重新分配可能会发生,而O(1)是摊销成本, 就像一个向量 。 所以我想知道这个结构是什么,它允许在任何时间任意访问,同时也不需要移动到一个新的更大的地方。
如何连接两个std::vector ?
我想传递一个重载的函数到std::for_each()algorithm。 例如, class A { void f(char c); void f(int i); void scan(const std::string& s) { std::for_each(s.begin(), s.end(), f); } }; 我希望编译器通过迭代器types来parsingf() 。 显然,它(GCC 4.1.2)不这样做。 那么,我怎样才能指定我想要哪个f() ?
作为(希望),我们都知道, vector<bool>完全破坏,不能被视为交stream数组。 什么是获得这个function的最好方法? 到目前为止,我所想到的想法是: 或者使用一个vector<char> 使用包装类,并有vector<bool_wrapper> 你们如何处理这个问题? 我需要c_array()function。 作为一个侧面的问题,如果我不需要c_array()方法,如果我需要随机访问,解决这个问题的最好方法是什么? 我应该使用一个deque或其他东西? 编辑: 我确实需要dynamic的大小。 对于那些不知道的人来说, vector<bool>是专用的,所以每个bool需要1位。 因此你不能把它转换成一个c样式的数组。 我想“包装”是一个误用。 我在想这样的事情: 当然,然后我必须读取到my_bool由于可能的alignment问题:( struct my_bool { bool the_bool; }; vector<my_bool> haha_i_tricked_you;
在C ++中删除空格的首选方法是什么? 我可以遍历所有的字符,并build立一个新的string,但有没有更好的办法?
问题是如何将wstring转换为string? 我有下个例子: #include <string> #include <iostream> int main() { std::wstring ws = L"Hello"; std::string s( ws.begin(), ws.end() ); //std::cout <<"std::string = "<<s<<std::endl; std::wcout<<"std::wstring = "<<ws<<std::endl; std::cout <<"std::string = "<<s<<std::endl; } 输出注释掉的是: std::string = Hello std::wstring = Hello std::string = Hello 但没有只是: std::wstring = Hello 这个例子有什么不对吗? 我可以做如上所述的转换吗? 编辑 新的例子(考虑到一些答案)是 #include <string> #include <iostream> #include <sstream> #include […]