小编ako*_*hko的帖子

C++ 构造函数隐式类型转换

让我们假设我有这个代码:

class A {
public:
    A(int y) { cout << y; }
};

int main() {
    A a(1.5);

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

即使 1.5 是float,这段代码也能工作并返回 1。float被隐式转换为int。为什么不抛出异常?构造函数是否依赖于参数的数量或其类型?我在哪里可以阅读有关此内容的信息?

c++ implicit-conversion

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

没有模板&lt;&gt;的 C++ 模板特化

我有两个版本的程序。第一的:

template<class T>
void f(T i, T j) = delete;

template<>
void f(int i, int j) {
    cout << i << j << endl;
};

int main()
{
    f(1.5, 2);

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

第二:

template<class T>
void f(T i, T j) = delete;

void f(int i, int j) {
    cout << i << j << endl;
};

int main()
{
    f(1.5, 2);

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

第一个版本不会编译,因为1.52有不同的类型。在我删除的第二个版本中,template<>因此1.5将转换为1并且程序将成功运行。那么,当我们 remove 时template<>,它仍然是模板特化,还是别的什么?除了隐式类型转换之外还有什么区别吗?有用吗?

c++

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

标签 统计

c++ ×2

implicit-conversion ×1