当前位置:  开发笔记 > 编程语言 > 正文

在参数中输入变量与字符串的std :: string的id?

如何解决《在参数中输入变量与字符串的std::string的id?》经验,为你挑选了3个好方法。

我提到http://en.cppreference.com/w/cpp/language/typeid来编写代码,它为不同的类型做了不同的事情.

代码如下,注释中给出了解释.

#include 
#include 

using namespace std;

template 
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")不是?

顺便说一句,我的g ++版本是g ++(Ubuntu 5.4.0-6ubuntu1~16.04.4)5.4.0 20160609.



1> Vlad from Mo..:

在这个电话中

test_template("Helloworld"); // Does not print string

参数"Helloworld"是一个具有类型的字符串文字const char[11].

因为函数参数是引用类型

void test_template(const T &t) 
                          ^^^

然后在函数内,参数(更确切地说是参数)具有类型const char ( &t )[11].

C++中的字符串文字具有常量字符数组的类型,其元素数等于字符串文字中的字符数加上终止零.

在这个电话中

test_template(str); 

参数有类型,std::string因为变量str声明为

string str = "ok";
^^^^^^

它由字符串文字初始化,"ok"但对象本身属于该类型std::string.



2> TartanLlama..:

C++中的字符串文字是类型const char[N+1],其中N是字符串中的字符数.std::string是一个标准库类,它拥有一个字符串并在其上提供许多操作.A std::string可以用a构造const char[N],但它们不是同一个东西.



3> Some program..:

字符串文字就像"Helloworld"是常量字符数组.

std::string班有一个构造函数,可以采取指向字符串常量,而是一个字符串文字本身不是一个std::string对象.


作为旁注,使用像你这样的函数被认为是代码嗅觉和糟糕的设计.使用重载函数代替不同的参数.这也将解决你的字符串问题.


同意,这里有一个模板是没有意义的.没有共同的功能.
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有