Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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
重载时的操作员优先级 我试图为简单的SQL命令做一个C++编译模型。例如,这可能是我的主要功能的一部分,我必须能够处理: CREATE_TABLE(books) [ // create("books");ovr[ COLUMN(c1) TYPE(string), // "title string", COLUMN(c2) TYPE(string), // "author string", COLUMN(num1) TYPE(int) // "price int" ];_C++_Operator Overloading_Operator Precedence - Fatal编程技术网

重载时的操作员优先级 我试图为简单的SQL命令做一个C++编译模型。例如,这可能是我的主要功能的一部分,我必须能够处理: CREATE_TABLE(books) [ // create("books");ovr[ COLUMN(c1) TYPE(string), // "title string", COLUMN(c2) TYPE(string), // "author string", COLUMN(num1) TYPE(int) // "price int" ];

重载时的操作员优先级 我试图为简单的SQL命令做一个C++编译模型。例如,这可能是我的主要功能的一部分,我必须能够处理: CREATE_TABLE(books) [ // create("books");ovr[ COLUMN(c1) TYPE(string), // "title string", COLUMN(c2) TYPE(string), // "author string", COLUMN(num1) TYPE(int) // "price int" ];,c++,operator-overloading,operator-precedence,C++,Operator Overloading,Operator Precedence,因此,为了做到这一点,我必须重载[]和,运算符。这样做之后,我发现,重载是在[]之前执行的。而我的猜测是[]应该首先被执行。发生这种情况有什么特别的原因吗?还是仅仅因为[]是在找到[]时执行的?必须首先计算[]内的表达式-需要将其作为参数传入,这就是为什么您会看到首先调用运算符的原因。必须首先计算[]内的表达式-需要将其作为参数传入,这就是为什么首先调用运算符。因为要调用运算符[],它需要一个参数。它将括号内的内容视为带逗号的表达式,并使用运算符来获得一个结果,通过该结果调用运算符[]。因为要调

因此,为了做到这一点,我必须重载[]和,运算符。这样做之后,我发现,重载是在[]之前执行的。而我的猜测是[]应该首先被执行。发生这种情况有什么特别的原因吗?还是仅仅因为[]是在找到[]时执行的?

必须首先计算[]内的表达式-需要将其作为参数传入,这就是为什么您会看到首先调用运算符的原因。

必须首先计算[]内的表达式-需要将其作为参数传入,这就是为什么首先调用运算符。

因为要调用运算符[],它需要一个参数。它将括号内的内容视为带逗号的表达式,并使用运算符来获得一个结果,通过该结果调用运算符[]。

因为要调用运算符[],它需要一个参数。它将括号内的内容视为一个带逗号的表达式,并使用运算符来获得一个结果,用该结果调用运算符[]。

因为[]运算符只接受一个参数,所以它会等待[]之间的整个表达式求值,然后再对其自身求值。

因为[]运算符只接受一个参数,它等待对[]之间的整个表达式求值,然后再对其本身求值。

看起来您正在使用运算符的结果作为运算符[]的参数,因此逻辑上只需要先对前者求值,如在fgx中


此外,在运行时不会解析任何内容。C++是一种编译语言。

看起来像是使用运算符的结果,作为操作数[]的参数,所以只有先对前者进行评估才是合乎逻辑的,如FGX。< /P>
此外,在运行时不会解析任何内容。C++是一种编译语言。

你的表达式将被编译成如下的东西,这可能解释了评价顺序:

CREATE_TABLE(books).operator[](
    COLUMN(c1) TYPE(string).operator,(
        COLUMN(c2) TYPE(string).operator,(
            COLUMN(num1) TYPE(int) 
        )
    )
);


取决于运算符的定义方式,也可能取决于列宏和类型宏的定义方式。

您的表达式将编译为以下内容,这可能会解释计算顺序:

CREATE_TABLE(books).operator[](
    COLUMN(c1) TYPE(string).operator,(
        COLUMN(c2) TYPE(string).operator,(
            COLUMN(num1) TYPE(int) 
        )
    )
);


取决于运算符的定义方式,也可能取决于列和类型宏的定义方式。

1。这听起来像是一个可怕的、注定要失败的想法。2.想想看:索引如何可能发生在括号内的表达式之前,并得到索引?是的,你是正确的,但是我是C++中的新的,我必须确保它不是偶然发生的…我想确定这是真的thx!如果您想使用这种类型的东西,请查看boost::proto库。Eric Nibler在中发表了一些文章,介绍了如何使用该库实现DSEL的简短教程。谢谢你,我会看一看:我仍在努力找出哪一列和哪一种类型可以使它工作。1。这听起来像是一个可怕的、注定要失败的想法。2.想想看:索引如何可能发生在括号内的表达式之前,并得到索引?是的,你是正确的,但是我是C++中的新的,我必须确保它不是偶然发生的…我想确定这是真的thx!如果您想使用这种类型的东西,请查看boost::proto库。Eric Nibler在文章中介绍了如何使用该库实现DSELs的简短教程。谢谢,我会看一看:我仍在努力确定哪一列和哪一种类型可以实现这一功能。