草庐IT

c++ - 可以将静态 constexpr 变量用作模板参数吗

我有以下代码可以在较旧的gcc上编译,但不能在版本6上编译(与-std=c++1z一起使用)。Clang也拒绝它,说对象val没有正确的链接。我不明白其中的区别。指针类型的constexpr变量不应该或多或少透明地工作吗?我在语法中是否缺少一些允许它工作的东西?还是这违反了标准的某些部分?typedefvoid(*t_voidfn)();templatestructs{};voidfn(){staticconstexprt_voidfnval=&fn;sx;}另一方面,这个可行。typedefvoid(*t_voidfn)();templatestructs{};voidfn(){sx

c++ - 我可以将 C++17 无捕获 lambda constexpr 转换运算符的结果用作函数指针模板非类型参数吗?

在回答HowdoIwritealambdaexpressionthatlookslikeamethod?时,我试图通过利用以下事实将无捕获lambda转换为成员函数指针,即自C++17以来,无捕获lambda有一个constexpr转换运算符到其函数指针类型。所以我想出了一个归结为:templatestructA{};intmain(){A([]{})>{};//1constexprautofp=static_cast([]{});A{};//2}现在,它在clang中编译(从5.0.0开始)但gcc(>=7.2)提示:error:lambda-expressionintemplate

c++ - 如何将枚举类用作一组标志?

假设我有一组标志和一个这样的类:///Optionscontrollingasearchforfiles.enumclassFindFilesOptions:unsignedchar{LocalSearch=0,RecursiveSearch=1,IncludeDotDirectories=2};classFindFiles:boost::noncopyable{/*omitted*/public:FindFiles(std::wstringconst&pattern,FindFilesOptionsoptions);/*omitted*/}我希望来电者能够选择多个选项:FindFil

c++ - 为什么枚举不能用作此 vector 构造函数中的参数?

这段代码片段:enum{N=10,M=100};vectorv(N,M);由于以下错误,无法使用VisualStudio2013进行编译:errorC2838:'iterator_category':illegalqualifiednameinmemberdeclaration这有什么问题? 最佳答案 这是VS2012和VS2013中的一个错误,因为它不符合C++11标准(_HAS_CPP0X定义为1):C++0323.1.1[lib.sequence.reqmts]/9说:Foreverysequencedefinedinthis

c++ - 将 lambda 中捕获的 const 值用作模板参数是否合法?

考虑以下由同事提供的代码:#include#includeintmain(){constintsize=4;return[size](){std::arraya;//*returna.size();}();}它被Clang5.0.0接受,但被GCC7.2拒绝,带星号的行的错误消息是:error:'__closure'isnotaconstantexpression哪个编译器是正确的? 最佳答案 该规则实际上很直观:任何不需要捕获的变量都指的是原始变量。[expr.prim.lambda]/11:Everyid-expressionw

c++ - 为什么外部链接变量可用作常量表达式?

在另一个问题的讨论中,我得到了一个例子,其中标识符的链接显然影响了它在常量表达式中的可用性:externcharconsta[]="Alpha";charconstexprb[]="Beta";charconstg[]="Gamma";templatevoidfoo(){}automain()->int{foo();//Compilesfoo();//Compilesfoo();//Doesn'tcompile}最后一个错误(使用GCC)是:test.cc:Infunction'intmain()':test.cc:12:13:error:thevalueof'g'isnotusabl

c++ - 哪个 MinGW 文件用作 C++ 编译器

我刚刚安装了MinGW,在bin文件夹中我可以看到7个编译我的程序的.exe文件:c++.exeg++.exemingw32-c++.exemingw32-g++.exegcc.exemingw32-gcc.exemingw32-gcc-4.4.1.exe我的小程序(testprog.cpp)都能正确编译;a.exe文件在bin文件夹下生成,运行正常。它们之间有什么区别,我应该使用哪一个?另外,如何在每次编译成功时自动将输出文件的名称从a.exe更改为testprog.exe? 最佳答案 这些遵循gcc命名约定。c++.exe是系统

node.js - 奇怪的 Mongoose schema.js 错误 - `options` 不能用作模式路径名

在我的架构中,如果我有options在metrics:[{options:{}}]那么我得到:/home/one/cloudimageshare-monitoring/project/node_modules/mongoose/lib/schema.js:282thrownewError("`"+path+"`maynotbeusedasaschemapathname");^Error:`options`maynotbeusedasaschemapathname但是,如果将options更改为任何其他单词...例如qoptions...。那么错误就会消失。为什么会这样?varmongo

javascript - 如何在层之间传递 http 服务器变量,而不是将其用作 node.js 中不同文件中的 require 语句?

我已经创建了一个nodeJS应用程序,它需要创建一个可以正常工作的服务器,在文件server.js中如下所示:http.createServer(app).listen(app.get('port'),function(err){if(err){console.error(err);}else{runProcess();console.log('Serverlisteningonport'+app.get('port'));}});现在我需要将此服务器传递给某个文件,并且我的应用程序构建如下:server.jsapp.jsroutes.jsaction.js所以我按照下面的方法快速完成

javascript - 当用作 Node.js 的 JS 引擎时,Microsoft 的 ChakraCore 是否比 Google 的 V8 提供任何性能优势

关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭6年前。Improvethisquestion[我已经编辑了我的问题,将场景缩小到只有Node.js。请重新打开它。这是一个有用的问题,正确的答案可能会在未来出现,而且不会很快出现,因为ChakraCore还很年轻。但是这个问题是有效的,应该在这里]多年来,我们都知道/读过/听说过GoogleV8引擎的荣耀,以及它如何让node.js变得如此美丽。但是现在我们可以选择Microsoft的ChakraCore和Google的V8作为我们首选的Java