【发布时间】:2014-12-31 19:13:08
【问题描述】:
我希望一个函数具有一个具有具体类型的通用引用参数。我希望它是通用引用,这样当我对检查其中存储的值不感兴趣时,我可以传递一个临时对象。
示例如下:
bool bCompareData(const uint8_t *arg_0, const uint8_t *arg_1, size_t &szComparedData)
{
size_t &i = szComparedData;
for (; arg_1[i]; ++i)
if (arg_1[i] != arg_0[i])
return false;
return true;
}
以及可能的函数调用:
bCompareData(Obj.uIdObject.data(), Ref.uIdTargetObject.data(), size_t()) // here we are passing a temporary (rvalue)
/*________________________*/
size_t lval;
bCompareData(Obj.uIdObject.data(), Ref.uIdTargetObject.data(), lval) // here we are passing a named variable (lvalue)
在第一个函数调用编译器中使用上述函数声明会出错,如果我将“size_t &szComparedData”更改为右值引用“size_t &&szComparedData”,第二次调用将失败。
现在我需要的是通用引用,但我也想在我的论点上有一个具体的类型,而不是使用模板。
我正在使用 VC++ U3 2013 编译器。
【问题讨论】:
-
MSVC 不允许第一个吗? (将非常量引用绑定到临时)
-
这里的另一种选择是将其设为
size_t *,然后如果您对查看结果不感兴趣,则可以传递nullptr(这可能是默认值) -
顺便说一句,你的实现很奇怪。看来您想要
strcmp或memcmp或std::mismatch。 -
@FrançoisMoisan:从示例中,参数既用作输入也用作输出。
-
@Jako 更多想法,stackoverflow.com/questions/2816293/…
标签: c++