【发布时间】:2010-06-25 20:47:36
【问题描述】:
这行得通:
#include<cstdio>
class A{
public:
A(int a):var(a){}
int var;
};
int f(A obj) {
return obj.var;
}
int main() {
std::cout<<f(23); // output: 23
return 0;
}
虽然不是这样:
#include<cstdio>
class A{
public:
A(int a, int b):var1(a), var2(b){}
int var1, var2;
};
int f(A obj) {
return (obj.var1 + obj.var2);
}
int main() {
cout<<f(22, 23); // error: conversion from 'int' to
// non-scalar type 'A' requested
return 0;
}
第二段代码不起作用,但我找不到一个足够好的理由为什么它不起作用。对我来说,代码看起来太奇怪了,无法运行。
但是在这种情况下只允许进行一次隐式转换的真正原因是什么?是不是 this-is-like-this-only 语言功能?
【问题讨论】:
-
当 f() 的原型只有一个时,为什么要向 f() 传递两个参数?
-
隐式转换已经够糟糕了。为什么哦,为什么要以指数方式增加其复杂性?
-
@user168715:我不想增加复杂性。我什至希望第一个代码片段失败。我只是想了解为什么有些事情是这样的。
标签: c++ constructor language-features language-design