草庐IT

限定词

全部标签

c++ - 限制 C 中的限定符与 LLVM IR 中的 noalias 属性

我的问题与C中的restrict限定符和LLVM中的noalias属性用作函数参数时的不同语义有关。根据LLVMdocumentationfornoalias:Thisindicatesthatobjectsaccessedviapointervaluesbasedontheargumentorreturnvaluearenotalsoaccessed,duringtheexecutionofthefunction,viapointervaluesnotbasedontheargumentorreturnvalue.如果是restrict限定符,C11(Example3,page124

c++ - 使用临时 volatile 限定符优化共享数组访问

我想知道在以下情况下临时的volatile限定符是否会产生正确的行为。假设ISR收集数组中的值,一旦收集到足够的值,它就会发出准备就绪的信号。intarray[10];//observenovolatilehereintidx=0;//neitherherevolatileboolready=false;//buthere这里的ISR是伪代码ISR(){if(idx=10);}假设我们可以保证array将只在ready发出信号并且元素被访问后被读取通过特定方法仅:intread(intidx){//temporaryvolatilesemanticsvolatileint*e=(vol

c++ - C++ 声明中的显式限定

当第一个声明被注释掉时,以下命名空间定义无法编译。如果foo的第一个声明未被注释,那么它编译得很好。namespaceY{//voidfoo();void::Y::foo(){}}标准(§8.3¶1)中的相关部分说:Whenthedeclarator-idisqualified,thedeclarationshallrefertoapreviouslydeclaredmember我了解此规则可防止将名称引入其他命名空间。我想知道是否可以放宽该规则以允许qualified-id引用当前命名空间。 最佳答案 CWG#482是相关的:Ac

c++ - `template` 关键字限定符能否使代码编译成功,但有所不同?

我正在阅读有关模板关键字限定符(https://www.ibm.com/support/knowledgecenter/SSPSQF_9.0.0/com.ibm.xlcpp111.aix.doc/language_ref/keyword_template_qualifier.html和WhereandwhydoIhavetoputthe"template"and"typename"keywords?)的信息,但仍有一些内容让我感到困惑。是否可能有这样的代码,它编译成功,但会导致两种不同的操作?SomeObjectInstance.templatesome_function();Some

c++ - 显式默认/删除的函数可以在 ref 限定符上重载吗?

简介Refqualifiers:一种消除隐含对象的rl-valuness歧义的方法。作为一个简单的例子,以下面的类为例classexample{intmember;public://...int&value()&;//^int&&value()&&;//^^intconst&value()const&;//^};使用此C++11功能(用^标记的语法),允许我们控制将用value()的版本p>左值临时工常量左值实际上ref限定适用于类的*thisDefaulted/Deletedfunctions:将一个特殊成员函数指定为编译器生成(默认)定义或不可访问(删除)。举个例子structty

c++ - 非限定名称查找找到内联命名空间成员

我写了下面的代码:#includeinlinenamespaceM{intj=42;}intmain(){std::cout而且效果很好。但我预计该程序格式错误。这是因为标准说(N3797,第7.3.1/7节):Finally,lookingupanameintheenclosingnamespaceviaexplicitqualification(3.4.3.2)willincludemembersoftheinlinenamespacebroughtinbytheusing-directiveeveniftherearedeclarationsofthatnameintheencl

c++ - 如何让 vc++ 和 g++ 在依赖限定类型的类型名方面表现相同?

是否可以为cl.exe提供一个开关,当限定的依赖类型中缺少typename时,它会启用警告或错误?我工作的环境中,开发人员倾向于在一个平台(Windows或Linux)上工作,代码最终每晚都在两个平台上构建。我们遇到了一个问题,人们忘记在Windows上的限定依赖类型上使用typename,VisualC++2008会在可能的情况下自动插入缺失的typename。当他们checkin这样的代码时,它会破坏Linux上的构建,其中g++需要typename。调整Makefile是可取的,这样我们就可以期望在Windows和Linux上有相同的typename行为,以减少构建中断的可能性。

c++ - 当调用来自相同的非 const 版本重载成员函数时,是否可以删除 const 限定符?

例如:structB{};structA{constB&findB()const{/*somenontrivialcode*/}//B&findB(){/*thesamenontrivialcode*/}B&findB(){constA&a=*this;constB&b=a.findB();returnconst_cast(b);}};问题是我想避免在常量findB和非常量findB成员函数中重复相同的逻辑。 最佳答案 是的,您可以将对象转换为const,调用const版本,然后将结果转换为非const:returnconst_ca

C++98/03 引用折叠和 cv 限定符

下面的代码编译(gcc4.7.2或icc13)并产生“12”输出。这意味着const预选赛被删除,我。即,f具有参数类型int&.为什么会这样?据我了解,根据§14.3.1.4:Ifatemplate-argumentforatemplate-parameterTnamesatype“referencetocv1S”,anattempttocreatethetype“referencetocv2T”createsthetype“referencetocv12S”,wherecv12istheunionofthecv-qualifierscv1andcv2.Redundantcv-qual

c++ -::运算符能否出现在与限定名称查找中的范围解析不同的上下文中?

作为用于限定名称查找目的的已知范围解析运算符。但是::返回的值是什么?据我了解,它是后缀一元运算符。请考虑以下事项:namespaceA{//something}A:://error:expectedunqualified-idbefore‘int’intmain(){}你能解释一下这种行为吗? 最佳答案 范围解析运算符::只是一个语法运算符,没有其他语义。也就是说,有些运算符只对语言的语法有贡献,而其他运算符也对程序的语义/运行时行为有贡献,并且可以自定义语义。这就是运算符重载。 关于