草庐IT

c++11 统一初始化不适用于 clang++

我从thiswikipediapage复制了以下示例:structBasicStruct{intx;doubley;};structAltStruct{AltStruct(intx,doubley):x_{x},y_{y}{}private:intx_;doubley_;};BasicStructvar1{5,3.2};AltStructvar2{2,4.3};intmain(intargc,charconst*argv[]){return0;}然后我尝试用编译它clang++-Wall-std=c++11test.cpp但是我得到这个错误:test.cpp:17:11:error:n

c++ - 具有三元的简单 C++11 constexpr 阶乘超出了最大模板深度

如果我使用专门化编写编译时阶乘函数,则以下代码就足够了,并将正确提供120作为fact1()的结果:templateconstexprsize_tfact1(){returnN*fact1();}templateconstexprsize_tfact1(){return1;}但是,对于单个函数体和三元运算符,如以下代码所示,G++4.7和Clang++3.2都超过了它们的最大模板实例化深度。看来1永远不会从fact2返回.为什么fact2()的定义是这样的?不返回120?templateconstexprsize_tfact2(){returnN==0?1:N*fact2();}

c++ - C++11 中的泛型函数指针

我目前正在用C++x0编写一个方法执行队列。我已经实现并验证了基本的队列机制,但想用一个选项来修改它,让push()自动删除所有以前对特定方法的调用:queue.push(this,&Obj::foo,1);queue.push(this,&Obj::foo,2);queue.push(this,&Obj::foo,3);应该和调用一样queue.push(this,&Obj::foo,3);到目前为止,我的代码如下所示:队列.h:#pragmaonce#include#includeusingstd::vector;usingstd::function;usingstd::bind;

C++11 局部命名引用返回值(xvalue)?

我们有以下类型X和函数f:structX{...};Xf(){...};现在考虑另一个函数g的三个替代定义:(1)voidg(){Xx=f();...}(2)voidg(){X&x=f();...}(3)voidg(){X&&x=f();...}三种不同情况下定义的行为(或潜在行为)有何不同?(假设占位符'...'代码在三种情况下是相同的)更新:如果g返回一个X会怎样:以下是否合法且正确?Xg(){X&&x=f();...returnmove(x);}(此举是否必要,是否有任何作用?)您是否希望RVO链接以便下面产生相同的代码?Xg(){Xx=f();...returnx;}

c++ - thread::get_id (C++11) 是免费的吗?

我想测试调用我的一个类的不同函数的线程。我有一个关键时间线程,我不希望任何人调用一个可能调用new的函数,以便从该线程调用。但是,由于这2个函数是公共(public)的,我无法通过语言强制执行。我的想法是测试线程id。假设我可以确保初始化线程ID的调用在正确的线程中,我只需要在其他调用中调用thread::get_id()并与我保存的线程ID进行比较。问题是我也想在关键线程中测试这个ID,但我不能锁定那个线程。因此我的问题是:thread::get_id()是否没有锁定(最糟糕的执行时间是什么时候)? 最佳答案 标准不保证threa

C++11 构造函数

新的move构造函数/move运算符允许我们转移对象的所有权,从而避免使用(昂贵的)复制构造函数调用。但是是否可以避免构造临时对象(不使用返回参数)?示例:在下面的代码中,构造函数被调用了4次-但理想情况下我想做的是避免在cross方法中构造任何对象。使用返回参数(例如voidcross(constVec3&b,Vec3&out)是可能的,但读起来很难看。我有兴趣更新现有变量。#includeusingnamespacestd;classVec3{public:Vec3(){staticintcount=0;id=count++;p=newfloat[3];cout

c++ - 从 c++11 中的用户定义文字返回 std::array

我刚刚安装了gcc-4.8.1,当我意识到我可以执行-std=c++1y并获得多行constexpr时,我非常兴奋。我很想知道,是否有办法使这项工作正常进行?#includeconstexprautooperator""_a1(constchar*text,constsize_tsize)->std::array{std::array()blah;std::strncpy(blah.data(),test,size);//dosomestufftoblahatcompiletimereturnblah;}intmain(){autoblah="helloworld"_a2;}但是我变得

c++ - 宏使用 GCC 编译但不使用 VS11

我编写了以下代码来帮助将我的模板函数限制为某些类型,并在使用其他类型时显示有意义的错误消息。我从stackoverflow中的另一个问题中得到了这个想法,我仍然无法对此发表评论,因为我是新来的。该宏在linuxGCC下可以完美编译,但不能在VisualStudio2012下编译。#include#include#include#include#include#defineISALLOWED(DerivedT)(std::is_same::value)||(std::is_base_of::value)#defineFE_1(WHAT,X)WHAT(X)#defineFE_2(WHAT,

c++ - 如何在 HLSL DirectX11 C++ 中使用 Texture2DArray

我只是想知道如何在HLSL中使用Texture2DArray。我正在尝试实现一个模型加载器,其中模型具有不同数量的纹理。目前,我的HLSL使用大小为2的Texture2D(纹理和普通纹理),但由于我的模型具有不同数量的纹理,我希望使用Texture2DArray但不知道从哪里开始。我一直试图在互联网上找到示例等,但没有运气:(我加载了编译为“ID3D11ShaderResourceView*”的纹理,所以我应该创建一个变量ID3D11ShaderResourceView**,我创建一个指向纹理的点数组,然后将其传递给着色器或什么?有什么帮助吗? 最佳答案

c++ - 使用 vim 作为 c++11 IDE

我已经在Vim中设置我的开发环境有一段时间了。由于我所有的项目都在C++11中,我发现了一些插件让我的生活更轻松,几乎与Intellij和Java时代一样好。但是,仍然缺少一些东西。我想念的主要功能是重构实用程序(跨项目重命名、将代码重构为函数/类、删除类,...)。关于如何在vim中获得此类功能的任何建议?我正在使用以下插件:gmarik/vundleValloric/你完成我一个.vimwincent/命令-TDoxygenToolkit.vimscrooloose/nerdtreegodlygeek/表格tpope/vim敏感tpope/vim-unimpairedtpope/v