私はhttp://en.cppreference.com/w/cpp/language/typeidを参照して、さまざまなタイプの異なることをするコードを記述しました。変数のstd :: stringの型IDと引数の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("Helloworld")
に対しtest_template(str)
プリント "の文字列" しないのですか?
ところで、私のG ++バージョンは、++(〜16.04.4 Ubuntuの5.4.0-6ubuntu1)"Helloworld"
などの5.4.0 20160609.
なぜdownvotes?確かに、それは基本的なレベルですが、問題は完全で明確であり、OPにはコンパイラバージョンも含まれています! – TartanLlama
'' Helloworld ''は' std :: string'ではありません。しかし、 "" Helloworld "sはそうだろう。 – Jarod42
@TartanLlama:ひどく壊れやすいコードを書くために 'typeid'を使いたいと思うユーザのためだと思います。 –