lvalue-to-rvalue

    0热度

    1回答

    在这里的代码类型转换后,测试左值或右值: #include <stdio.h> template <typename T> T const f1(T const &t) { printf("T const \n"); return t; } template <typename T> T f1(T &t) { printf("T\n"); ret

    0热度

    2回答

    这里的网站说: http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=%2Fcom.ibm.vacpp6m.doc%2Flanguage%2Fref%2Fclrc05lvalue.htm If an lvalue appears in a situation in which the compiler exp

    7热度

    2回答

    class Test { public: int n1; }; Test func() { return Test(); } int main() { func() = Test(); } 这对我没有任何意义。如何以及为什么这是允许的?它是不确定的行为?如果一个函数返回一个右值,那么如何将右值设置为另一个右值?如果我用任何原始类型尝试

    11热度

    2回答

    C++ 03§4.2N°1: 左值或类型的右值“阵列NT的”或“的阵列T的未知边界“可以转换为类型为”指向T的指针“的右值。结果是指向数组的第一个元素的指针。 很长时间以来,我一直在困惑的是,我并不完全理解数组类型的右值意味着什么。也就是说,我无法想出一个表达式,其类型是一个数组,结果是一个右值。我读this线程,它基本上提出相同的问题,并且接受的答案是“不,数组类型不存在右值”。我想我可能会对此

    6热度

    2回答

    我一直在网上阅读很多人,似乎很多人提到了下面的规则(但我在标准中找不到它), 加法运算符+(和所有其他二元运算符)要求两个操作数都是右值,结果是右值。 等等.. 我检查C++标准,它明确指出(第3.10/2), 每当glvalue出现在 上下文其中prvalue预计, 的glvalue被转换为prvalue (第5/9), 每当glvalue表达似乎 作为操作者的操作数 预计,该操作数一prval

    0热度

    2回答

    最近我一直在尝试理解移动语义并提出了一个问题。 该问题已被讨论here。 我实现了第一个变种,并检查其是否返回L值或R值: #include <iostream> using namespace std; template <typename T> T&& my_forward(T&& x) { return static_cast<T&&> (x); } int main