Я ссылался на http://en.cppreference.com/w/cpp/language/typeid, чтобы написать код, который делает разные вещи для разных типов.Тип id std :: string для переменной vs. string в аргументе?
Код указан ниже, и пояснения приводятся в комментариях.
#include <iostream>
#include <typeinfo>
using namespace std;
template <typename T>
void test_template(const T &t)
{
if (typeid(t) == typeid(double))
cout <<"double\n";
if (typeid(t) == typeid(string))
cout <<"string\n";
if (typeid(t) == typeid(int))
cout <<"int\n";
}
int main()
{
auto a = -1;
string str = "ok";
test_template(a); // Prints int
test_template("Helloworld"); // Does not print string
test_template(str); // Prints string
test_template(10.00); // Prints double
return 0;
}
Почему test_template(str)
печать "строка", а test_template("Helloworld")
не?
Кстати, моя г ++ версии г ++ (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0 20160609.
Почему downvotes? Конечно, это на базовом уровне, но вопрос завершен, понятен, и OP даже включает версию компилятора! – TartanLlama
'' Helloworld ''не является' std :: string'. Но '' Helloworld '' был бы. – Jarod42
@TartanLlama: Я бы предположил, что это из-за пользователя, который хочет использовать 'typeid' для написания ужасно хрупкого кода. –