相关疑难解决方法(0)

在C++中通过引用传递给参数的默认值

在我们通过引用传递参数时,是否可以为函数的参数提供默认值.在C++中

例如,当我尝试声明一个函数时:

virtual const ULONG Write(ULONG &State = 0, bool sequence = true);
Run Code Online (Sandbox Code Playgroud)

当我这样做时,它给出了一个错误:

错误C2440:'default argument':无法从'const int'转换为'unsigned long&'不是'const'的引用不能绑定到非左值

c++ pass-by-reference default-value

113
推荐指数
7
解决办法
12万
查看次数

空引用是否可行?

这段代码是否有效(和定义的行为)?

int &nullReference = *(int*)0;
Run Code Online (Sandbox Code Playgroud)

这两个g ++以及铛++编译它没有任何警告,即使使用-Wall,-Wextra,-std=c++98,-pedantic,-Weffc++...

当然,引用实际上不是null,因为它无法访问(这意味着取消引用空指针),但我们可以通过检查其地址来检查它是否为null:

if( & nullReference == 0 ) // null reference
Run Code Online (Sandbox Code Playgroud)

c++ null reference language-lawyer

91
推荐指数
4
解决办法
10万
查看次数

std ::引用类型的可选专门化

为什么std::optional(目前std::experimental::optionallibc ++中)没有引用类型的专门化(与之相比boost::optional)?

我认为这将是非常有用的选择.

是否有一些对象引用STL中可能已存在的对象语义?

c++ stl optional c++11 boost-optional

22
推荐指数
4
解决办法
1万
查看次数

具体类型的通用参考

我希望函数具有一个具体类型的通用引用参数.我希望它是通用引用,所以当我不想检查存储在其中的值时,我可以传递一个临时对象.

这是一个例子:

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;
}
Run Code Online (Sandbox Code Playgroud)

可能的函数调用:

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)
Run Code Online (Sandbox Code Playgroud)

在第一个函数调用编译器中使用上述函数声明将给出错误,如果我将"size_t&szComparedData"更改为rvalue引用"size_t && szComparedData",它将在第二次调用时失败.

现在我需要的是Universal References,但我也希望在我的论证中有一个具体的类型,而不是使用模板.

我正在使用VC++ U3 2013编译器.

c++

2
推荐指数
1
解决办法
299
查看次数