我知道下面的代码不起作用,我完全理解为什么。我实际上不明白的是为什么不:
int main(int argc, char *argv[]) {
std::cout << (atoi(argv[1]) ? "foo" : 'b') << std::end;
}
为什么:当然,这个表达式可能生成字符串或整数,这是编译器指出的错误:
error: operands to ?: have different types ‘const char*’ and ‘char’
为什么不:由于和operator<<
两种类型都有绑定,为什么编译器不像在模板中那样执行代码扩展——我猜这就是执行的操作。const char*
char
例如,如果我有:
template <class T>
void a(const T& value) {
std::cout << a << std::endl;
}
我可以调用a("foo")
and a('b')
,而且——我猜——编译器会使用类型名称对函数进行一次扩展,[T = const char*]
然后使用[T = char]
.
这可能是一个简单的问题,即 C++ 做什么——以及它不做什么——,但我看不到如果执行扩展,是否有任何极端情况会出现错误。