Articles of c ++ 11

测量时间导致返回值为0或0.001

我正在尝试使用chrono::steady_clock来测量我的程序中的一段代码之间经过的小数秒数。 我有这个代码块在LiveWorkSpace工作( http://liveworkspace.org/code/YT1I$9 ): #include <chrono> #include <iostream> #include <vector> int main() { auto start = std::chrono::steady_clock::now(); for (unsigned long long int i = 0; i < 10000; ++i) { std::vector<int> v(i, 1); } auto end = std::chrono::steady_clock::now(); auto difference = std::chrono::duration_cast<std::chrono::microseconds>(end – start).count(); std::cout << "seconds since start: " << ((double)difference / 1000000); } […]

C ++编译器隐式地实例化模板类的所有成员函数是否有效?

假设我有一个公共类和一个私有实现类(例如PIMPL模式),我希望用带有删除检查的模板智能指针类来包装私有类,如下所示: PublicClass.h class PrivateClass; // simple smart pointer with checked delete template<class X> class demo_ptr { public: demo_ptr (X* p) : the_p(p) { } ~demo_ptr () { // from boost::checked_delete: don't allow compilation of incomplete type typedef char type_must_be_complete[ sizeof(X)? 1: -1 ]; (void) sizeof(type_must_be_complete); delete the_p; } private: X* the_p; }; // public-facing class […]

MinGW 5.3.0-2不能正常工作

升级到MinGW 5.3.0-2(实际版本)后出现bizzare错误 我检查了一切,因为这是我第五次重新安装它,并认为这将有所帮助 Code :: Blocks输出: mingw32-g++.exe -Wall -fexceptions -g -c C:\Users\Tudor\Documents\C++\test\main.cpp -o obj\Debug\main.o mingw32-g++.exe -o bin\Debug\test.exe obj\Debug\main.oc:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lpthread collect2.exe: error: ld returned 1 exit status Process terminated with status 1 (0 minute(s), 0 second(s)) 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) 注意:如果我检查-std = c ++ 11或-std = c ++ 14标志,我得到的输出如下所示: 点击我 […]

是正则expression式的gcc 4.8或更早的车?

我正在尝试在C ++ 11代码中使用std :: regex,但看起来支持是有点bug。 一个例子: #include <regex> #include <iostream> int main (int argc, const char * argv[]) { std::regex r("st|mt|tr"); std::cerr << "st|mt|tr" << " matches st? " << std::regex_match("st", r) << std::endl; std::cerr << "st|mt|tr" << " matches mt? " << std::regex_match("mt", r) << std::endl; std::cerr << "st|mt|tr" << " matches tr? " […]

如何获得使用标准库创build的线程的winapi id?

C ++ 11的标准库包含允许线程创build的<thread> 。 不过,Windows API需要一些ID(即PostThreadMessage )。 我怎么才能得到它? 备注: std::thread::get_id()似乎不工作: PostThreadMessage(m_thread->get_id(), WM_QUIT, 0, 0); e:\documents\khook\khooker\hook_runner.cpp(129): error C2664: 'PostThreadMessageW' : cannot convert parameter 1 from 'std::thread::id' to 'DWORD'

如何在Sublime Text 3 C ++和Gtk +中构build系统

我想在Sublime Text 3中使用C ++和Gtk +构build一个简单的文本编辑器。使用Gtk +作为跨平台的应用程序。 现在我会满足于一个简单的窗口,虽然ST3不断出现问题。 我目前正在运行Windows 7 64位。 起初我将gtk+-bundle_3.10.4 64bit下载到C:\gtk+并下载了MinGW – 为C ++安装gcc-g ++。 然后我更新环境variables-PATH与文件夹C:/MinGW/bin;C:/gtk+/bin;…和其他path,如build议这里 。 现在在ST3中“build立系统”,我按照build议在这里做了 。 我运行脚本(pkg-config ..)得到一个“链接器”和一个“头文件”,结合起来,就像你可以在下面的代码中看到的一样(如这里所build议的)试图写入ST3,但是我得到的只是“没有build立系统“。 正如你现在所看到的 – 我迷路了,请帮助我,我很确定我错过了一些东西。 这里是我在ST3“build system”中编写的代码: { "cmd": ["g++", "-o" "${file_path}/${file_base_name}.exe" "-static-libgcc" "-static-libstdc++" "*.cpp" "-mms-bitfields – IC:/gtk+/include/gtk-3.0 – IC:/gtk+/include/cairo – IC:/gtk+/include/pango-1.0 – IC:/gtk+/include/atk-1.0 – IC:/gtk+/include/cairo – IC:/gtk+/include/pixman-1 – IC:/gtk+/include -I/srv/win32builder/fixed_3104/build/win64/include/freetype2 -I/srv/win32builder/fixed_3104/build/win64/include/libxml2 – IC:/gtk+/include/libxml2 -I/srv/win32builder/fixed_3104/build/win64/include/freetype2 […]

你需要安装使用Clang在Windows上构build64位的C + + 14?

更新: 我已经写了一个详细的教程,包含这个问题的前两个答案: http : //blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt1/ TL; DR 在Windows上,给定以下程序: #include <iostream> int main() { int arr[] = {1, 2, 3, 4, 5}; for(auto el : arr) { std::cout << el << std::endl; } return 0; } 我希望能够做到以下几点: clang++ hello.cpp -o hello.exe -std=c++14 并获得一个64位可执行文件正常工作 。 我不想再追加大量的-I包括告诉clang在哪里可以findiostream或其他标准的c ++头文件; 我不想在多个步骤中链接。 我不关心性能,效率,链接器的使用等等。我只是想能够正确设置clang / gcc /任何东西,这样我就可以使用一个单一的,快速和肮脏的控制台命令上面那个。 我需要安装什么才能工作 ? 问题 作为一个主要的Mac / […]

Windows上的C ++ 11

我想知道在C ++ 11中编写软件如何在Windows上工作。 这将是最舒适的(也是最自然的)使用Windows的本地编译器之一 – 我在想这里的Visual Studio 2012 Express或Visual Studio 2013 Express。 在这个问题上我所能find的一切都是 http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx (比较VC10和VC11的C ++ 11function,这似乎是相当糟糕的) http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking-changes-in-vs-2013.aspx (不是真的透明,没有给我一个好主意,它有多好) 有没有人有任何经验目前的Visual Studio版本可以如何处理C + + 11? 我真的想开始使用自动,lambdas,可变参数模板,模板别名,初始化列表和右值引用(仅举几个),现在所有其他好东西,但如果Windows可能是一个问题,我可能不得不使用C ++ 03进一步。 另一种可能性似乎是在Windows上安装LLVM和Clang。 我的主要平台是OSX,在该系统上,Clang对C ++ 11的支持非常好。 但是我读到,C ++标准库(libc ++)的LLVM版本在Windows上不能正常工作。 所以LLVM /铛可能不是一个选项。 你对Windows上的C ++ 11开发有什么看法? 谢谢!

std :: u32string转换为/从std :: string和std :: u16string

我需要在UTF-8,UTF-16和UTF-32之间针对不同的API /模块进行转换,因为我知道可以select使用C ++ 11来查看新的stringtypes。 它看起来像我可以使用UTF-8,UTF-16和UTF-32的string , u16string和u32string 。 我还发现codecvt_utf8和codecvt_utf16看起来能够做char或char16_t和char32_t之间的转换,看起来像一个更高级别的wstring_convert但似乎只能使用字节/ std::string wstring_convert std::string而不是大量的文档。 我打算为UTF-16 UTF-32和UTF-8 UTF-32情况使用wstring_convert吗? 我只是真的find了UTF-8到UTF-16的例子,我甚至不能确定在wchar_t通常被认为是UTF-32的Linux上是正确的…还是直接用这些codecvt做些更复杂的事情呢? 或者这只是还没有真正处于可用状态,我应该坚持我自己现有的小例程使用8,16和32位无符号整数?