草庐IT

c++ - 扩展编译器以在编译时评估 "complicated"函数(具有已知输入值),超出 `constexpr` 范围

请看thisexample.尝试使用constexpr获得编译时评估将是极其困难的,如果不是不可能的话。但是,在调用函数的地方,所有参数在编译时都是已知的。理论上,(存在一些优化属性?),编译器可以暂停解析,创建一个带有函数的小程序,编译它,运行它,并得到结果以创建一个char常量以用于主程序编译.我知道其中一个问题是交叉编译:如果编译器可以构建一个可以在正在构建的机器上运行的程序,那么你只能从编译器运行一个程序。但这似乎并非无法克服。毫无疑问:我不是第一个想到它的人。但我尝试搜索,但只能找到constexpr和template东西。将来有没有计划在任何编译器中实现这样的功能?该功能也

c++ - 调试断言失败。C++ vector 下标超出范围

下面的代码应该删除vector中的重复值。例如,如果vector包含{1,5,3,3},则结果应为{1,5,3}。程序启动,我输入整数n*。但是,程序会抛出以下错误:Debugassertionfailed.Program:...\include\vectorline:932Expression:vectorsubscriptoutofrange.当我按下重试时,visualc++显示一个新窗口:"try.exehastriggeredabreakpoint".然后,我点击继续后,出现另一个错误:DebugAssertionFailed!Program:...\include\vect

c++ - 当对象超出范围时执行一些代码

有时我想确保在从另一个函数返回之前执行了一些函数调用,或者一个整数被递减。例如考虑这段代码:voiddoSomething(){try{..........return;...............return;......}catch(...)}myvariable--;}我想确保myvariable始终递减,无论是否存在异常或返回调用。在C++中是否有任何内置对象用于此目的,或者我应该创建自己的类来接受std::function并在对象超出对象析构函数的范围时执行它?例如,在C#中有try..catch...finallyblock,您可以在finally中放置任何要在函数返回之

c++ - 局部变量在超出范围时删除另一个变量的内存

这个问题在这里已经有了答案:WhatisTheRuleofThree?(8个答案)关闭9年前。在设计动态分配内存的类时,我遇到了以下有关内存分配的问题。我希望你们中的一些人能够为我指明正确的方向,让我知道我应该如何以更好的方式设计我的类(class)。我的类动态分配内存,因此也在其析构函数中将其删除。为了说明问题,请考虑以下愚蠢的类声明:classtestClass{int*data;public:testClass(){data=newint;*data=5;}~testClass(){deletedata;}};到目前为止一切顺利。现在假设我在main中创建了这些对象之一intma

c++ - C++ 标准对超出目标类型范围的类型的强制转换结果有何规定?

最近我不得不执行一些从float到16位整数的数据类型转换。基本上我的代码减少到以下floatf_val=99999.0;shortintsi_val=static_cast(f_val);//si_valisnow-32768这个输入值是个问题,在我的代码中我忽略了检查浮点值的限制,所以我可以看到我的错误,但这让我想知道当必须这样做时语言的确切规则笨拙的Actor。我有点惊讶地发现类型转换的值(value)是-32768。此外,这是我在float的值超过16位整数的限制时得到的值。我用谷歌搜索了这个,但令人惊讶地发现缺乏关于它的详细信息。我能找到的最好的是来自cplusplus.co

C++:如果抛出异常,超出范围的对象是否被销毁?

通常它会在作用域结束时被销毁。但是如果抛出异常,我可以看到会发生问题。 最佳答案 是的。C++标准n333715异常处理§15.2构造函数和析构函数1)Ascontrolpassesfromathrow-expressiontoahandler,destructorsareinvokedforallautomaticobjectsconstructedsincethetryblockwasentered.Theautomaticobjectsaredestroyedinthereverseorderofthecompletionof

c++ - 我可以访问超出范围的对象的 Qt 信号/槽吗?

Qt信号/槽是否遵循原生C++的范围?假设我有以下类:House、Kitchen、Cellar、Stove和Shelf。classHouse{Kitchenkitchen,Cellarcellar;};classKitchen{Stovestove;};classCellar{Shelfshelf;};现在我想从地窖的架子向厨房的炉子发送信号。唯一的方法是将信号从架子连接到地窖,将插槽从厨房连接到炉子,然后在室内连接地窖和厨房吗?或者有没有办法直接做到这一点?我有一个类需要与用户界面通信,我想知道是否需要通过中间类“代理”所有各种信号/槽。或者这是糟糕设计的标志?

c++ - 超出范围的模板参数的预期行为?

templatevoidfoo(void){}templatevoidfoo();templatevoidbar(void){}templatevoidbar();GCC实例化foo和bar;Clang以“错误:非类型模板参数的计算结果为2,无法将其缩小为类型‘bool’[-Wc++11-narrowing]”拒绝两者。上面的代码有效吗?这是其中之一的错误吗?使用的版本:Clang3.8.0-2ubuntu4,GCC5.4.020160609(Ubuntu5.4.0-6ubuntu1~16.04.2) 最佳答案 这是gcc错误578

C++ 指向函数返回时超出范围的对象的指针 - 为什么这样做有效?

这两个对get_string和get_string2的调用都会返回在函数返回时超出范围的对象。返回的对象不应该是函数返回后超出范围的内存地址吗?这是使用VisualStudio2008。这应该始终有效吗?为什么?#includeenummyID{SMALL,MEDIUM,LARGE};constchar*get_string(myIDid){switch(id){caseSMALL:return"small";caseMEDIUM:return"medium";caseLARGE:return"large";default:return"unknown";}}constchar*get

c++ - 为什么在超出数组末尾写入时不会出现段错误?

为什么编译时没有报错?#includeusingnamespacestd;intmain(){int*a=newint[2];//inta[2];//eventhisisnotgivingerrora[0]=0;a[1]=1;a[2]=2;a[3]=3;a[100]=4;intb;return0;}谁能解释一下为什么会这样。提前致谢。) 最佳答案 因为未定义的行为==任何事情都可能发生。你很不幸它没有崩溃,这种行为可能会隐藏错误。 关于c++-为什么在超出数组末尾写入时不会出现段错误?,