相关疑难解决方法(0)

2753
推荐指数
11
解决办法
81万
查看次数

您可以使用关键字显式来阻止方法参数的自动转换吗?

我知道你可以使用C++关键字'explicit'作为类的构造函数来防止类型的自动转换.您是否可以使用相同的命令来阻止类方法的参数转换?

我有两个类成员,一个将bool作为参数,另一个是unsigned int.当我用int调用函数时,编译器将param转换为bool并调用错误的方法.我知道最终我将替换bool,但是现在不想破坏其他例程,因为这个新例程已经开发出来了.

c++ explicit implicit-conversion

52
推荐指数
3
解决办法
2万
查看次数

通过const char*构造函数将false转换为object

我构建了以下最小的示例:

class A
{
    public:
        A(const char *s);

    private:
        const char *p;
};

A::A(const char *s)
  : p(s)
{
}

A foo()
{
    return false;
}

A bar()
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

g++ (Debian 4.7.2-5) 4.7.2我一起编译得到以下内容:

t.cc: In function 'A foo()':
t.cc:17:10: warning: converting 'false' to pointer type for argument 1 of 'A::A(const char*)' [-Wconversion-null]
t.cc: In function 'A bar()':
t.cc:23:10: error: could not convert 'true' from 'bool' to 'A'
Run Code Online (Sandbox Code Playgroud)

据我所知,如果类有构造函数,则可以使用一种类型T而不是类的实例.在这种情况下,T的值/实例由编译器在对构造函数的调用中包装.AAA(T)A(T)

此外,只有一个直接隐式转换是允许的,即没有链 …

c++ type-conversion implicit-conversion

3
推荐指数
1
解决办法
544
查看次数