相关疑难解决方法(0)

防止主要数据类型 C++ 的隐式转换

BLOT:C++ 具有隐式转换,我正在寻找一种方法来防止它。

让我举一个例子,下面的代码片段:

#include <iostream>

int incrementByOne(int i) {
    return ++i;
}

int main()
{
    bool b = true;
    
    std::cout << incrementByOne(b) << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它将输出:2

我怎样才能防止这种隐式转换,并且即使在运行时也严格只采用 int 作为参数?

我能想到的一种方法是重载函数。所以新代码将如下所示:

#include <iostream>

int incrementByOne(int i) {
    return ++i;
}

int incrementByOne(bool) {
    std::cerr << "Please provide integer as argument" << std::endl;
    exit(0);
}

int incrementByOne(char) {
    std::cerr << "Please provide integer as argument" << std::endl;
    exit(0);
}

int main()
{
    bool b = true;
    
    std::cout << incrementByOne(b) << …
Run Code Online (Sandbox Code Playgroud)

c++ implicit-conversion c++11 c++14 c++17

0
推荐指数
1
解决办法
1445
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

c++17 ×1

implicit-conversion ×1