草庐IT

三元表达

全部标签

C++ lambda 表达式无法编译

我正在尝试使用lambda表达式cin循环索引值:#includeusingnamespacestd;intmain(){for(inta,([](int&b){cin>>b;})(a);a这些是我在ubuntu上使用g++4.5编译时的错误:forLoopAndCinTest.c++:Infunction‘intmain()’:forLoopAndCinTest.c++:5:14:error:expectedunqualified-idbefore‘[’tokenforLoopAndCinTest.c++:5:14:error:expected‘)’before‘[’tokenfor

c++ - 不能出现在常量表达式中

在下面的c++程序中:staticconstintrow=(dynamic_cast(log(BHR_LEN*G_PHT_COUNT)/log(2)));staticconstintpht_bits=((32*1024)/(G_PHT_COUNT*G_PHT_COUNT*BHR_LEN));unsignedchartab[pht_bits][1我收到错误消息doublelog(double)'cannotappearinaconstant-expression。为什么我会遇到这个问题,因为我在前面放了一个整数?我应该如何解决这个问题? 最佳答案

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++ - Qt的foreach表达式需要深拷贝?

我在使用Qt的foreach函数时遇到了一些问题。我有一个Phrase类,它是QList的一个子类。在~Phrase中,我删除了所有GlossItem指针。在遍历Phrase中的GlossItem指针时,我想使用Qt的foreach://phraseisapointertoaPhraseobject,//whichisasubclassedQListforeach(GlossItem*glossItem,*phrase){//useglossItem}出于某种原因,foreach正在对Phrase执行深度复制(我知道这一点,因为它需要我实现复制构造函数)。但是,如果有Phrase的拷贝

c++ - 成员初始化中表达式的求值是否相对于彼此排序?

具体来说,假设我有:structX{X(inti){cout我知道成员的构造函数保证按照它们在struct中定义的顺序被调用,所以0将在1之前打印。但是如何评价他们的论点呢?是否保证:f0g1?或者,也许,fg01和gf01也是有效输出吗?对标准的引用表示赞赏。 最佳答案 在C++11draftstandard中,每个成员初始值设定项都是一个完整表达式,因此所有副作用都必须在下一个评估之前生效。12.6.2初始化基和成员段7说:[...]Theinitializationperformedbyeachmem-initializerc

c++ - 哪些提升类型用于 switch-case 表达式比较?

以下程序在使用不同的编译器编译时打印“unknown”。为什么会这样?#include"stdio.h"constcharOPTION=(char)(unsignedchar)253;intmain(intargc,char*argv[]){unsignedcharc=253;switch(c){caseOPTION:printf("option\n");break;default:printf("unknown\n");break;}return0;}在查看C++标准(N36902013-05-05)时,我看到了switch的子句:6.4.2Theswitchstatement2Th

c++ - static_casting a constexpr void* 的结果是常量表达式吗?

clang正在拒绝gcc允许的这段代码:intmain(){staticconstexprconstvoid*vp=nullptr;staticconstexprconstchar*cp=static_cast(vp);}具有以下内容:error:constexprvariable'cp'mustbeinitializedbyaconstantexpressionstaticconstexprconstchar*cp=static_cast(vp);阅读完N3797中的最终list后5.9/2我没有看到任何禁止在常量表达式中使用static_cast的内容。我是在看错地方还是误读了什么

c++ - 是否可以使用三元运算符 "?"来填充 C/C++ 中的数组列表?

这可能是一个愚蠢的问题。我正在修改别人开发的代码。我需要根据逻辑变量ThreeDim详细说明一些字符数组的值。我正在尝试这样做但没有成功。intVarNumber=ThreeDim==1?3:2;constchar*VarList[]=ThreeDim==1?{"X","Y","Z"}:{"X","Y"};但是编译器给我这样的错误error:expected‘;’before‘}’tokenerror:initializerfailstodeterminesizeof‘VarList’由于下游要求,VarList需要是constchar*。它的大小应该是VarNumber。谢谢

c++ - 了解常量表达式

我试图理解常量表达式概念(来自c++reference):structS{staticconstintc;};constintd=10*S::c;//notaconstantexpression:S::chasnopreceding//initializer,thisinitializationhappensafterconstconstintS::c=5;//constantinitialization,guaranteedtohappenfirst在我们定义它之前,为什么S::c不是常量表达式。虽然它被声明为静态const数据成员...... 最佳答案

c++ - 为什么 `auto&` 不能绑定(bind)到 volatile 右值表达式?

考虑下面的代码:intmain(){inti{};auto&c=static_cast(i);//(1)auto&v=static_cast(i);//(2)}(1)编译成功,(2)不被接受:error:volatilelvaluereferencetotype'volatileint'cannotbindtoatemporaryoftype'volatileint'为什么auto不能变成volatileint?为什么auto&可以变成constint并绑定(bind)到constint&&?是因为auto&实际上绑定(bind)到一个在赋值右侧创建的临时对象吗?但是,为什么auto&