C++ 常量字符**看起来像什么?

C++ 常量字符**看起来像什么?,c++,constructor,C++,Constructor,我有一个类,它接受主命令行参数(例如,-B,-a等),并对它们进行处理,但我希望能够在不传递命令行参数的情况下实例化该函数,例如: 建造商: myClass(int argc, const char **argv){ <initialise class with flags from argv> } myClass() : myClass(2, "-B") {} } myClass(int argc,const char**argv){ } myClass():myCla

我有一个类,它接受主命令行参数(例如,-B,-a等),并对它们进行处理,但我希望能够在不传递命令行参数的情况下实例化该函数,例如:

建造商:

myClass(int argc, const char **argv){
    <initialise class with flags from argv>
}

myClass() : myClass(2, "-B") {}
}
myClass(int argc,const char**argv){
}
myClass():myClass(2,“-B”){}
}
在这里,我试图用标志“-B”实例化myClass,但它一直给我错误:

参数3从'const char[3]'到'const char**'的转换未知。


所以我想知道我需要做什么才能将一个值作为const char**传入?

const char**
是指向
const char*
的指针。在本例中,您打算将多个参数作为
argv
的一部分传递,因此可以传递如下内容:

const char* argv[] = {"<program name>", "B"};
myClass m(2, argv);
const char*argv[]={”,“B”};
myClass m(2,argv);
注:
const char**x
&
const char*x[]
相同。当需要“表示”数组时,第二种语法很有用


这里我给出了一种模拟内部测试的
main(int,char**)
函数参数的方法。如果您想从默认构造函数传递到参数构造函数,那么上述所有内容都必须是全局的。

第一级是指向
char*
的第一个指针。第二级是指向c字符串的第一个
const char
的指针

> cdecl explain "const char ** args"
declare args as pointer to pointer to const char
如果有-std=c++11可用,则可以使用此示例(但可以重写为使用旧标准):

#包括
#包括
#包括
课堂测试{
公众:
测试(常量标准::向量和参数){
用于(自动参数:参数(&A){

std::cout这不是真正的代码。请发布真正的代码。现在,投票结束,因为缺少示例。注意1:如果您想传递
main
参数,那么类型
const char**argv
将不起作用。没有从
char**
char const**
的隐式转换。注意2:char
的数组(例如文字
“-B”
)不会衰减为指针对指针。您可能需要类似
char flag[]=“-B”
的内容,然后您可以将
flag
的地址作为
char**
传递,方法是将其作为
myClass(2,&flag)传递
@DavidC.Rankin您缺少一个链接:应该有一个
char const*
指向标志[0]。或者,
char const*flag=“-B”
。注意:在您的示例中,
argv
不是一个
const char**
,注释没有解释这一差异。没有理由相信问题中的代码准确地代表了真实的代码。这是一种“类似的情况”也就是说,如果您真的认为值得提供一个答案,那么我认为您应该解决与目标“接受主命令行参数”不兼容的问题.@juanchopanza,没错&我在答案中已经给出了这一点。似乎OP希望将这些参数传递给自己的类以进行进一步处理。此外,
main()
中的
char**
是出于C遗留原因(当时不存在
const
).这就是原因,我提出了
const char**
,因为它从未打算更改
argv
@Cheers,似乎OP想要使用构造函数的委托对
main
的参数传递到自己的类进行单元测试。
main()
出于遗留原因接受
char**
,但实际上它们应该被视为
const char**
。我在代码中做了一些琐碎的解释。如果您觉得需要更多解释,请在此处随意评论或编辑答案。
#include <iostream>
#include <vector>
#include <string>    

class test {
  public:
    test(const std::vector<std::string> & args) {
      for (auto & arg : args) {
        std::cout << arg << "\n";
      }
    }

    test() : test{{"-B"}} {}
};

int main(int argc, const char ** argv) {
  test sth{{argv+1, argc+argv}}; // skip program name here
  test sth_else;

}