草庐IT

c++ - 在括号内的 lambda 中声明名称为 `this` 的变量会在 3 个不同的编译器上产生不同的结果

在C++中,可以在括号内声明变量,例如int(x)=0;。但似乎如果您使用this而不是变量名,则使用构造函数代替:A(this);调用A::A(B*)。那么第一个问题就是为什么this不一样,是不是因为变量不能命名为this?让事情变得复杂一点,让我们把this放在lambda中-structB;structA{A(B*){}};structB{B(){[this]{A(this);}();}};现在gcc调用A::A(B*),msvc打印关于缺少默认构造函数的错误,clang打印expectedexpression(https://godbolt.org/g/Vxe0fF)。它在m

c++ - 在可变参数模板中使用大括号括起来的初始值设定项列表?

我正在尝试在可变参数模板函数中使用大括号括起来的初始化列表,但编译器提示...是我要求太多还是我做错了什么?最好用例子来证明这一点:structBracy{Bracy(inti,intj){}};structTest{voidconsumeOne(inti){}voidconsumeOne(constBracy&bracy){}voidconsume(){}templatevoidconsume(constT&first,Values...rest){consumeOne(first);consume(rest...);}templateTest(Values...values){co

c# - 奇怪的括号行为的 Visual Studio 可能的错误

我正在用visualstudio编写一些C#代码,我有一个带有括号的奇怪行为。让我们看一个例子。首先我写了这段代码:然后,当我使用AltGr+Shift+[添加单个括号时,我得到了这个:整个类(class)都被选中。我怎样才能避免这种情况?更新到最新版本后出现此问题。我使用的是最新版本的一切。我有VS15.8.0、C#7.3和.NET4.7.2,知道吗?请注意,有时,在{整个类都被选中后,我无法输入右括号}。当我编写C++时也会发生这种情况。(就像一个新的控制台应用程序)。我现在已经在一个空项目中对其进行了测试,问题也出现在C++上(VS15.8.0、C++17)。我在我的库中添加了一

c++ - 在 C++ 中是否允许从括号值列表中赋值 std::array?

在c++primer(第5版)中,提到不允许从花括号值列表赋值std::array。Becausethesizeoftheright-handoperandmightdifferfromthesizeoftheleft-handoperand,thearraytypedoesnotsupportassignanditdoesnotallowassignmentfromabracedlistofvalues.下面的代码作为例子给出。std::arraya1={0,1,2,3,4,5,6,7,8,9};std::arraya2={0};//elementsallhavevalue0a1=a

如何删除除括号所包含的字符以外的所有字符

假设您有下面的文本文件Ihaveapples,bananas,(somepineapplesover4),andcherries(coconutswithhappyface:D)andsoon.Youmayhelpyourselfexceptforcherries(theyareformyparentssorry;C).IfeellikeIcanrunafruitbusiness.我要做的是删除除括号所包含的字符之外的所有字符。请记住,一对括号中的字符范围从英语到其他字符都可以变化,但是没有其他标点可以作为封闭字符的角色发挥作用:只能允许括号。我想我应该利用gsub但不确定。这就是我想要的结果

c++ - 在 g++ 中使用 __attribute__ 的不平衡括号

今天我在前段时间开发的一个项目上尝试了clang。当它遇到编译错误时我很惊讶,因为我已经使用g++成功编译了我的项目。这个简短的片段重现了遇到错误的行:intmain(){__attribute__((aligned(16))chararr[5];}产生此错误的原因:test.cpp:2:32:error:expected')'__attribute__((aligned(16))chararr[5];^)如您所见,有一个不平衡的括号。有三个“(”和两个“)”。这显然看起来应该会产生编译错误。这是该关键字的有效用法吗?我似乎无法在thedocumentation上找到任何内容这表明它是

c++ - 在循环/if 括号后检测分号

GCC中是否有任何标志(如clang中的-Wempty-body),可以帮助我检测while/for循环大括号后的分号?有时人类很难发现这些简单的错误。inti=0;for(i=0;i我使用GCC4.7.3和clang3.2-1~exp9ubuntu1。编辑:我还检查编译器是否可以帮助我在“if-else语句”之后找到这些错误。if(i==0){cout有趣的是gcc通过打印警告比clang更有帮助(带有此标志(-Wall-pedantic-Wempty-body):main.cpp:30:9:warning:suggestbracesaroundemptybodyinan‘else’

c++ - 围绕数组放置新运算符的括号

在尝试对数组进行placementnew时,我(偶然/错误地)想到了以下代码:#includestructX{};intmain(){charbuf[256];std::size_tn=10;X*p=new(buf)(X[n]);//incorrectway,parenthesisbymistake//X*p=new(buf)X[n];//correctway}main中的第三行不正确,尽管它可以编译。不应该有任何括号。clang++spitsoutwarning:whentypeisinparentheses,arraycannothavedynamicsize当gcc6输出时war

c++ - 为什么这不起作用? (引用的大括号初始化)

#includeintmain(){structA{unsignedcharl;std::arrayc;};constAa={1,"t"};//OKconstA&ar={1,"t"};//error:invalidinitializationofreferenceoftype'constmain()::A&'fromexpressionoftype''}(海湾合作委员会8.2,-std=c++17)Thisquestion谈论一个GCC错误,但它是旧的(7年前)。请注意,我不关心生命周期延长,我实际上是将临时变量直接传递给一个函数以供使用而不是存储它,但我尝试让示例变得干净。编辑:我不

c++ - Very Sleepy 分析器中花括号附近显示的时间测量值代表什么?

我正在使用VerySleepy分析一些C++代码,我注意到在SourceView中,它显示了红色的逐行时间测量值,在某些情况下,只有方法的左花括号或右花括号的行总是有测量值与函数中的其他代码行相比,这些情况非常高。我最初的假设是显示将方法参数压入左大括号堆栈所花费的时间,以及为右大括号弹出堆栈所花费的时间。这是真的吗? 最佳答案 我从VerySleepy的维护者RichardMitton(@grumpydev)在推特上得到了一个答案:“很可能函数已经优化,所以行号与代码不完全匹配更多。也就是说,所有时间都集中在开始时,而不是分散在函