Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;11、我如何指定隐式;这";参数";[[携带依赖关系]]";?_C++_C++11_This_Member Functions_Carries Dependency - Fatal编程技术网

C++ 在C++;11、我如何指定隐式;这";参数";[[携带依赖关系]]";?

C++ 在C++;11、我如何指定隐式;这";参数";[[携带依赖关系]]";?,c++,c++11,this,member-functions,carries-dependency,C++,C++11,This,Member Functions,Carries Dependency,在[dcl.attr.depend]/1中,我读到: 属性[…]带有依赖关系[…]可应用于函数声明或lambda中的参数声明的声明符id, 在这种情况下,它规定参数的初始化对该对象的每个左值到右值转换(4.1)具有依赖性(1.10)。该属性也可以应用于函数的声明器id 声明,在这种情况下,它指定返回值(如果有)对函数调用表达式的求值具有依赖性 我缺少的是将属性应用于隐式this参数的方法 例如,考虑这个自由函数: void fun(int i, Foo * [[carries_dependenc

[dcl.attr.depend]/1中,我读到:

属性[…]
带有依赖关系
[…]可应用于函数声明或lambda中的
参数声明的
声明符id
, 在这种情况下,它规定参数的初始化对该对象的每个左值到右值转换(4.1)具有依赖性(1.10)。该属性也可以应用于函数的声明器id
声明,在这种情况下,它指定返回值(如果有)对函数调用表达式的求值具有依赖性

我缺少的是将属性应用于隐式
this
参数的方法

例如,考虑这个自由函数:

void fun(int i, Foo * [[carries_dependency]] f);
它是等效的(但对于属性)成员版本:

void Foo::fun(int i); // can't add [[carries_dependency]] here?

我不确定,也没有一个编译器支持这个测试,但这里有一个可能性:我认为语法[gram.decl]表明你应该能够把它(“属性说明符”opt)放在你放“const”的同一个位置,以指示这个指针的常量(“cv-qualifier-seq_opt”),这很有意义:

parameters-and-qualifiers:
    ( parameter-declaration-clause ) attribute-specifier_opt cv-qualifier-seq_opt
        ref-qualifier_opt exception-specification_opt
例如


我很确定这是可以做到的,但您必须查看标准中的语法。我可以试着猜测它将是类似于
[[carries_dependency]]void-fun(int)
void-fun(int)[[carries_-dependency]]。@David Rodríguez-dribeas如果我正确阅读语法,则前者将属性应用于函数的返回值(如果有)而后者是不允许的。@MarkB:8.4.1p2似乎表明函数属性是函数声明中的最后一个元素。我很好奇:是什么编译器实际实现了C++11的属性语法?与
const
成员相比,
=default
等并不奇怪
struct X{
    void f(int i) [[carries_dependency]];
};