- 主题:怎么指定函数参数必须是严格地匹配类型?
比如以下这段代码:
int square(int num) {
return num * num;
}
float square(float num) {
return num * num;
}
int main(int argc)
{
auto r = square(1.0);
return 0;
}
怎么写才能让编译器在调用 square(1.0) 的时候总是选中 float 的那个版本呢?
--
FROM 120.33.10.*
我都是强制的: square((float)1.0);
【 在 hgoldfish 的大作中提到: 】
: 标 题: 怎么指定函数参数必须是严格地匹配类型?
: 发信站: 水木社区 (Fri Dec 9 13:19:06 2022), 站内
:
: 比如以下这段代码:
:
: int square(int num) {
: return num * num;
: }
:
: float square(float num) {
: return num * num;
: }
:
: int main(int argc)
: {
: auto r = square(1.0);
: return 0;
: }
:
: 怎么写才能让编译器在调用 square(1.0) 的时候总是选中 float 的那个版本呢?
:
: --
: 灭绝人性啊
:
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 120.33.10.*]
--
FROM 120.204.45.*
不是号称强类型语言吗
【 在 hgoldfish 的大作中提到: 】
: 比如以下这段代码:
: int square(int num) {
: return num * num;
: ...................
--
FROM 1.93.45.*
square(1.0f)即可
【 在 hgoldfish 的大作中提到: 】
: 标 题: 怎么指定函数参数必须是严格地匹配类型?
: 发信站: 水木社区 (Fri Dec 9 13:19:06 2022), 站内
:
: 比如以下这段代码:
:
: int square(int num) {
: return num * num;
: }
:
: float square(float num) {
: return num * num;
: }
:
: int main(int argc)
: {
: auto r = square(1.0);
: return 0;
: }
:
: 怎么写才能让编译器在调用 square(1.0) 的时候总是选中 float 的那个版本呢?
:
: --
: 灭绝人性啊
:
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 120.33.10.*]
--
FROM 182.150.115.*
不知道这样行不行
template<typename T>
struct number
{
explicit number(float);
friend number square(number x) { return x*x; };
};
或者直接把int给delete掉 int square(int, int) = delete;
--
修改:ble FROM 222.129.50.*
FROM 222.129.50.*
只有这条路吧
不这样搞的话,默认类型转换规则就起作用。
我之前问过怎么用宏严格检查函数的入参、返回值,原因是我想搞一个宏CHECK(),要求宏的括号里必须是个bool,然后使用CHECK()宏的函数的返回值也必须是bool。
强制要求返回值是bool的话也只能这么搞,返回一个模板对象,模板的参数不是bool就让它没法通过编译。
【 在 ble 的大作中提到: 】
: 不知道这样行不行
: template<typename T>
: struct number
: ...................
--
修改:z16166 FROM 114.241.227.*
FROM 114.241.227.*
对了std::is_same()可以要求严格匹配,可以用在enable_if或者static_assert中,不匹配就编不过。
不过std::is_same也是偏特化匹配
--
FROM 114.241.227.*
几个函数写在一个类里边。编译器会自动给你选。
【 在 hgoldfish 的大作中提到: 】
: 比如以下这段代码:
: int square(int num) {
: return num * num;
: ...................
--
FROM 221.221.51.*