连接字符和字符串文字

时间:2014-01-26 18:04:19

标签: c++ string c++11 char concatenation

我的问题是:

error_print(argv[0], "invalid option -- '" << (char)optopt << "'");

我知道我无法使用<<,但我也无法使用+。因为它给出错误:

error: invalid operands of types 'const char*' and 'const char [2]' to binary 'operator+'

如何将其作为字符串传递给我的error_print函数?

看起来好像过度杀戮但是我用它20次,我只是让演示变得非常简单。

PS:我可以使用C ++ 11。

void error_print(string name, string error) {
    cerr << name << ": " << error << endl << endl;
    cerr << "Usage: " << name << " [-a -b]" << endl;
    exit(1);
}

int main( int argc, char** argv)
{
    bool a_flag = false;
    bool b_flag = false;

    opterr = 0;

    int c;
    while (1) {
        struct option long_options[] =                  
        {
            {"alpha",  no_argument,       0, 'a'}, 
            {"beta",  no_argument,    0, 'b'},
            {0, 0, 0, 0}
        };
        e.
        int option_index = 0;

        c = getopt_long (argc, argv, "ab",long_options, &option_index);

        if (c == -1)
            break;

        switch (c) {
            case 0:
                break;
            case 'a':
                a_flag = true;
                break;
            case 'b':
                b_flag = true;
                break;
            case '?':
                error_print(argv[0], "invalid option -- '" << (char)optopt << "'");
                break;                                              
            default:
                error_print(argv[0], "");
                break;  
        }
    }

2 个答案:

答案 0 :(得分:3)

您不能将+用于文字字符串和单个字符,但您可以将其用于std :: string,因此请使用

"invalid option -- '" + std::string(1, optopt) + "'"

答案 1 :(得分:2)

如果您的编译器足够新(草案C ++ 14):

"invalid option -- '"s + char(optopt) + "'"s

此功能可以添加到C ++ 11中,因为它具有语言支持,(在C ++ 14之前,标准库不提供s文字)

std::string operator "" s(const char* str, std::size_t len)
{
    return {str,len};
}