1

我有一个类,它解析命令行参数,然后将解析后的值返回给客户端类。对于解析,我需要传递argv给解析函数。我想通过引用传递,但据我所知,我们在传递数组时从不使用“&”符号。数组不是可以通过引用传递的对象。这是我的代码:

#include <iostream>
#include <fstream> 
using namespace std;

class cmdline
{
    const char * ifile;
    public:

    cmdline():ifile(NULL){}

    const char  * const getFile() const
    {
        return (ifile);
    }

    void parse(int argc,const  char** argv)
    {
        //parse and assign value to ifile 
        //  ifile = optarg;
        // optarg is value got from long_getopt

    }
};

int main(int argc, char ** argv)
{
    cmdline CmdLineObj;
    CmdLineObj.parse(argc, const_cast<const char**>(argv));
    const char * const ifile = CmdLineObj.getFile();
    ifstream myfile (ifile);
    return 0;
}

1)argv处理的方式对吗?

2)更好的处理方式,ifile

3) 我想ifile作为参考返回,如果需要,我应该做些什么改变?

我的代码按照它应该工作的方式工作,但我来到 SO 的原因是“不仅仅是让它工作”,而是要正确地做到这一点。

谢谢你的帮助。

编辑:: 在 Mehrdad 发表评论后,我编辑如下:

class CmdLine
{
    const char *  ifile;

public:
    const  char  * & getFile() const
    {
        return (ifile);
    }

但是我得到了错误-从类型'const char'的表达式中对类型'const char *&'的引用的无效初始化</p>

4

1 回答 1

0

数组不是可以通过引用传递的对象。

什么让你有那个想法?

1) argv 的处理方式是否正确?

CmdLineObj.parse(argc, const_cast< const char** >(argv));

你为什么要 const 铸造那个?您可以更改 to 的定义,而不是强制main转换const char** argv

2)更好的处理方式,ifile?

好吧,总是有std::string,但是由于您似乎所做的只是将值传递给std::ifstream我没有看到使用它的意义。

3) 我想返回 ifile 作为参考,如果需要,我应该做些什么改变?

返回指针作为参考有什么意义?您是否期望调用者getFile实际更改指向此类字符串的成员?你不应该这样做,因为getFile它是一个const成员函数。如果您正在考虑性能,那么在这种情况下返回对指针的引用实际上会比按值返回指针更糟糕。从 中返回时,字符串内容不会被复制getFile,就像如果ifile是 an那样std::string(在这种情况下返回 const 引用是有意义的)。

于 2011-09-18T05:25:29.360 回答