相关疑难解决方法(0)

字符串文字匹配bool重载而不是std :: string

我正在尝试编写一个包含一些重载方法的C++类:

class Output
{
public:
    static void Print(bool value)
    {
        std::cout << value ? "True" : "False";
    }

    static void Print(std::string value)
    {
        std::cout << value;
    }
};
Run Code Online (Sandbox Code Playgroud)

现在让我说我调用方法如下:

Output::Print("Hello World");
Run Code Online (Sandbox Code Playgroud)

结果就是这样

真正

那么,为什么,当我定义该方法可以接受布尔值和字符串时,当我传入一个非布尔值时,它是否使用布尔重载?

编辑:我来自C#/ Java环境,对C++来说还是新手!

c++ string boolean overloading overload-resolution

35
推荐指数
3
解决办法
4468
查看次数

为什么隐式转换在C++中是有害的

我知道关键字explicit可用于防止隐式转换.

例如

Foo {

 public:
 explicit Foo(int i) {}
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,在什么条件下,应该禁止隐含转换?为什么隐式转换有害?

c++

23
推荐指数
3
解决办法
2443
查看次数

重载,可变函数和bool类型

以下程序编译好并按预期工作.它的输出是:

1
2

#include <stdio.h>

class Foo
{
public:
  void Bar(const char* b, ...) { printf("1\n"); };
  void Bar(int a, const char* b, ...) { printf("2\n"); };
};

int main()
{
  Foo foo1;
  foo1.Bar("Test", "xx", 1, 2);
  foo1.Bar(1, "xx", "xx", 2, 2);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我改变int的第二个参数Bar的功能为boolfoo1.Bar(1, "xx", "xx", 2, 2);foo1.Bar(true, "xx", "xx", 2, 2);,那么,下面一行将无法编译,我得到的错误:'Foo::Bar': 2 overloads have similar conversions:

  foo1.Bar("Test", "xx", 1, 2);
Run Code Online (Sandbox Code Playgroud)

整个程序不编译:

#include <stdio.h>

class Foo
{
public: …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

8
推荐指数
2
解决办法
351
查看次数

标签 统计

c++ ×3

boolean ×1

c++11 ×1

overload-resolution ×1

overloading ×1

string ×1