【发布时间】:2011-12-31 05:27:49
【问题描述】:
int x = fromString("test"):无法推断出“ValueType”的模板参数
int x = fromString<int>("test") : 工作正常
那么为什么编译器会在这里挣扎呢?我看到它有各种真正的模板函数,而不仅仅是这个愚蠢的例子。它一定是语言的一个特征,但是什么?
【问题讨论】:
-
为什么可以转换成int的东西叫“toString”?
-
This question 讨论了类似的问题。
-
它“只是没有”。请注意,这是语言,而不是编译器——尽管实际上它并没有在语言中指定,部分原因是编译器在一般情况下会变得正确。
-
@MarceloCantos 我的错误,已修复。
-
如果允许,该语言还需要规则来解决可能出现的明显歧义。例如,
template <typename T> T doubleit(T t) { return 2*t; }。现在,int i = doubleit(0.5);是否调用doubleit<int>(匹配i)或doubleit<double>(匹配0.5)?结果是不同的,所以即使语言有解决歧义的规则,任何阅读代码的人都很容易出错。让子表达式的类型和含义仅取决于子表达式本身,而不是周围的表达式,至少很简单。