c++11专题提供c++11的最新资讯内容,帮你更好的了解c++11。
我知道这个问题可能看起来非常基本.但我无法找到任何一个没有指针的移动构造函数的例子. 我有一个包含矢量对象变量的类.不是一个指针.所以我的问题: 这是否意味着我不需要移动构造函数?或者我的实现是错误的,我应该使用指向向量的指针,然后使用移动构造函数? 谢谢 如果您的类包含可移动对象(例如向量),那么只需让编译器生成隐式移动操作.他们会做正确的事情,移动每个子对象. 如果您自己处理动态对象或其他非托
我必须创建一个图像,其列数是原始图像的两倍.因此,我将新图像的宽度保持为原始图像的宽度的两倍. 虽然这是一个非常简单的任务,但我已经完成了,但我想知道使用memcpy()执行此任务所获得的奇怪结果. 我的代码: int main() { Mat image = imread("pikachu.png", 1); int columns = image.cols; int
c 11标准对模板工会有什么看法吗? (我在 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf找不到任何东西,但我没有仔细阅读.) 我有 template<typename T> union u { T a; char b; }; template<typename T> u<T> make_u(T t)
可变参数模板可以将某些类型的函数重写为更清晰,类型安全的版本.这是printf的情况,如 Wikipedia给出的示例: void printf(const char *s) { while (*s) { if (*s == '%' && *(++s) != '%') throw std::runtime_error("invalid format
我已经阅读其他帖子,这似乎是组合哈希值的最佳方法.有人可以打破这一点,解释为什么这是最好的方式呢? template <class T> inline void hash_combine(std::size_t& seed, const T& v) { std::hash<T> hasher; seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) +
如何迭代可变参数模板类的所有基类并为每个类调用一个函数. 这是一个最小的例子: struct A { void foo() { std::cout << "A" << std::endl; } }; struct B { void foo() { std::cout << "B" << std::endl; } }; struct C { void foo() { std::cout << "C"
我有一个简单的窗口应用程序,声明了主窗口回调过程: WNDCLASSEXW wcx; /* ... */ wcx.lpfnWndProc = MainWndProc; 并且在WinMain之后我声明了LRESULT CALLBACK MainWndProc(HWND mainWindow,UINT msg,WPARAM wparam,LPARAM lparam){/ * … * /}并且一切正常,
我使用一些代码来报告任务的持续时间,使用std :: chrono :: high_resolution_clock … c 0x的一部分. 我可以使用-gnu 0x标记成功编译eclipse cdt中的c 0x功能.虽然成功编译,编辑器似乎不知道c 0x,也就是说我的代码中显示了任何c 0x特性的错误.我通过将-gnu 0x标志添加到我的项目发现选项来解决.注意:在您执行其他编译并重建索引之前不
我试图理解右值引用和移动语义.在下面的代码中,当我将10传递给Print函数时,它会调用rvalue reference overload,这是预期的.但究竟发生了什么,10将被复制(或从它引用的地方).其次std :: move实际上做了什么?它从i中提取值10然后通过吗?或者是编译器使用右值参考的指令? void Print(int& i) { cout<<"L Value refer
以下代码重现了我的问题: #include <iostream> #include <iomanip> #include <string> void p(std::string s, int w) { std::cout << std::left << std::setw(w) << s; } int main(int argc, char const *argv[]) { p("
第一:std :: move和std :: forward定义在哪里?我知道他们在做什么,但是我找不到要包含标准标题的证据.在 gcc44有时std :: move可用,有时它不是,所以一个definitive include指令将是有用的. 当实现移动语义时,源可能被置于未定义状态.这个状态是否一定是对象的有效状态?显然,您需要能够调用对象的析构函数,并且可以通过类暴露的任何方式赋值给它.但其他
我开始使用c 11功能,我喜欢使用智能指针来拥有对象.这是我的课: class MyClass { public: vector<MyObject*> get_objs() const; private: vector<unique_ptr<MyObject>> m_objs; }; 语义是MyClass拥有通过make_unique()创建的一系列MyObject. g
请考虑以下代码: struct MyString { // some ctors MyString& operator+=( const MyString& other ); // implemented correctly }; MyString operator+( const MyString& lhs, const MyString& rhs ) { MyString nr
我知道: > typeof是gcc扩展名,不属于C标准. 问题: > C 11中的单词typeof是否被弃用?换句话说,在使用C 11时,是否允许它仍然用作gcc扩展名? >用decltype替换每个类型会产生相同的代码行为是否正确? >假设我有模板< typename T>类包装器.声明wrapper_some_field使其等效于:Wrapper< typeof(some_field)>的最佳
如何将类型从可变模板参数转换为另一种类型? 例如: template <typename... T> struct single { std::tuple<T...> m_single; }; template <typename... T> struct sequences { single<T...> get(size_t pos) { // I don't
看起来我不能将无捕获的lambda作为模板参数传递给由函数指针函数模板化.我做错了吗,还是不可能? #include <iostream> // Function templated by function pointer template< void(*F)(int) > void fun( int i ) { F(i); } void f1( int i ) { std::
我希望能够传递一个整数或一个double(或一个字符串)作为模板参数,并在某些情况下将结果转换为整数,并将其用作类中类型的模板参数. 这是我尝试过的: template <typename MPLString> class A { // the following works fine int fun() { // this function should re
“C primer 5th edition”第14.1章, An operator function must either be a member of a class or have at least one parameter of class type. 例如,字符串(“hello”)“world”编译“hello”“world”不会.当我想重载两个C字符串时. std::string o
我正在尝试使用std :: aligned_storage模式实现简单静态数组的16字节对齐: #include <type_traits> int main() { const size_t SIZE = 8; using float_16 = std::aligned_storage<sizeof(float) * SIZE, 16>::type; float_16 m
我的编译器是clang 3.4,它完全支持C 14和std :: forward_list. #include <forward_list> struct A { A() {} explicit A(initializer_list<int>) {} }; A f1() { return A(); // OK } A f2() { retur