草庐IT

C++标准

全部标签

c++ - GNU 编译器 vs. Visual Studio 在数组上分配 w/Length Constant w/in a Scope

我知道如果你在c/c++中设置一个动态值,你不能在括号内使用该值来分配一个数组(这会使它成为所谓的可变长度数组(VLA),其中currentC++standard不支持)...即见:C++:VariableLengthArrayhttp://en.wikipedia.org/wiki/Variable-length_array我不太明白(而且我在这里没有看到确切地问到的)是为什么GNUc/c++编译器(gcc、g++)没问题使用基于整数值的动态分配(据我所知),只要该值是数组分配范围内的常量,但VisualStudio不支持这一点并且将拒绝编译代码,吐出错误。例如在g++中voidFo

c++ - 可变长度数组 VLA(静态绑定(bind)或动态)

我已经很久没有在基本的编译器中使用基本数组进行编程了,但是最近我看到了这样的数组声明:inty;cin>>y;intz[y];过去的编译器常常给出错误“数组的存储大小不是常量”。然后我发现了C99中的可变大小数组。我想知道他们是如何在内部运作的。这会使数组动态化吗?这个内存是在堆上分配的吗?这种绑定(bind)是否仍然是静态完成的?如果是这样的话。 最佳答案 VariableLengthArray(VLA)是C99的一个特性,但包括gcc在内的几个编译器支持VLAasanextension在C99和gcc之外和clang在C++中支

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++1y标准是否考虑过支持coroutine/goroutine?

我认为协程/goroutine在必须快速执行大量并发小任务的情况下非常有用。当前的std::thread成本太高,无法满足要求。我也认为协程/goroutine不能简单地通过C++库来支持,它应该直接由语言的核心特性来实现。因为coroutine/goroutine有特殊的语义,在当前的C++标准中没有相应的概念。假设我们新增一个关键字cppgo,那么我们可能会写出如下代码:voidf(intn){...}intmain(){for(inti=0;i那该有多酷!C++1y标准是否考虑支持coroutine/goroutine? 最佳答案

c++ - 其他等效的有符号和无符号类型的别名

C和C++标准都允许相同整数类型的有符号和无符号变体相互使用别名。例如,unsignedint*和int*可能是别名。但这还不是全部,因为它们显然具有不同范围的可表示值。我有以下假设:如果通过int*读取一个unsignedint,该值必须在int范围内,否则会发生整数溢出并且行为未定义。这是正确的吗?如果通过unsignedint*读取int,则负值环绕,就好像它们被强制转换为unsignedint一样。这是正确的吗?如果该值在int和unsignedint范围内,则通过任一类型的指针访问它都是完全定义的并给出相同的值。这是正确的吗?此外,兼容但不等价的整数类型呢?在int和long

java - 重定向标准输出和标准输入 - Java

在编写c/c++代码时,使用freopen()非常方便.请看下面的代码片段-intmain(){intn1,n2,result;freopen("input.txt","rb",stdin);freopen("output.txt","wb",sdtout);while(scanf("%d%d",&n1,&n2)==2&&n1>0&&n2>0){.........printf("%d\n",result);}return0;}当我们尝试调试/测试小型控制台应用程序时,以这种方式使用freopen()非常有用。我们可以将示例输入放入'input.txt'文件一次,然后每次都重复使用它们,

c++ - 缩写类型名称 long long 与 long long int,是否符合标准?

我看到的大多数代码都使用缩写类型来声明变量,例如longlongx;//longlongintxshorty;//shortinty我浏览了C++11标准(第3.9.1节),类型总是完整声明的,如longlongint。我找不到任何关于缩写类型的提及。我很确定这些缩写符合标准,但想确定是否确实如此。所以我的问题是上面的代码是否完全符合标准。 最佳答案 是的,这是有效的,它包含在draftC++11standard中7.1.6.2简单类型说明符部分说:Table10summarizesthevalidcombinationsofsim

c++ - 正确使用工厂类的标准 move

我想创建一个如下所示的工厂类,但我不确定这是使用std::move的正确方法。我不想使用太多的shared_ptr,因为在另一个shared_ptr中的shared_ptr真的很难看,有时还会让人困惑......选项1:classFoo{public:Foo(Foo&&f){...}}classFooFactory{public:staticFoo&&createFoo(...){Footemp(...);returnstd::move(temp);}}main(){Foof=FooFactory::createFoo(...);}选项2:classFooFactory{public:

c++ - 快速找到以 2 为底的对数的整数部分

计算float以2为底的对数的整数部分的有效方法是什么?有点像N=ceil(log2(f))或N=floor(log2(f))对于floatf。我想这有可能以某种方式非常有效地实现,因为人们可能只需要访问浮点指数。EDIT2:我主要对准确性不感兴趣。我可以容忍+-1的错误。我列出这两种变体只是作为示例,因为其中一种可能在计算上比另一种更便宜(但我不知道)。我需要这个来控制算法的精度,其中参数f是一些公差,并且需要对数来控制项数。日志的准确计算并不重要。编辑:这与其他许多要求integer参数的log2的问题(例如Howtodoanintegerlog2()inC++?)不重复。这是关于

SECS/GEM300标准和重要性

近年来,随着半导体产业的蓬勃发展,GEM300标准在中国的半导体行业中的重要性逐渐凸显。GEM300作为SEMI标准中的一项,是应用于300毫米晶圆半导体制造工艺所需的标准规范。这一标准对于投入到300mm晶圆半导体制造工序中的设备来说,是必要的标准化规范。在中国的半导体制造工序中,300mm晶圆制程的比例持续上升,从而对遵循GEM300标准的设备需求也在逐步增加。在中国半导体设备制造行业,引入GEM300标准存在一些挑战。尤其是在支持300mm制程的情况下,与现有SECS/GEM标准相比,场景支持的复杂性较高。尽管如此,中国半导体行业也在积极努力支持GEM300标准。然而,由于标准化行业的本