将C数组文字转换为C++;建造师? 我有一些C代码,我试图转换成一个C++类。我遇到了一些C文字数组(如果我调用它们是错误的,请纠正我),我不知道如何在C++构造函数中初始化它们,因为我认为你不能做文字,我认为它们是编译时特定的,是运行时特定的。

将C数组文字转换为C++;建造师? 我有一些C代码,我试图转换成一个C++类。我遇到了一些C文字数组(如果我调用它们是错误的,请纠正我),我不知道如何在C++构造函数中初始化它们,因为我认为你不能做文字,我认为它们是编译时特定的,是运行时特定的。,c++,c,C++,C,我是否应该将数组显式定义为某个大小,然后在构造函数中对数组执行strcpy或类似的文本处理 char sysUpTime[] = {1,3,6,1,2,1,1,3,0}; 可以使用std::string存储OID,然后在成员初始值设定项列表中初始化它,例如: #include <string> class Wrapper { public: Wrapper() : sysUpTime("1.3.6.1.2.1.1.3.0") { } private: std::string

我是否应该将数组显式定义为某个大小,然后在构造函数中对数组执行strcpy或类似的文本处理

char sysUpTime[] = {1,3,6,1,2,1,1,3,0};

可以使用std::string存储OID,然后在
成员初始值设定项列表中初始化它,例如:

#include <string>
class Wrapper
{
public:
  Wrapper() : sysUpTime("1.3.6.1.2.1.1.3.0") { }
private:
  std::string sysUpTime;
};
#包括
类包装器
{
公众:
包装器():sysUpTime(“1.3.6.1.2.1.1.3.0”){}
私人:
字符串系统运行时间;
};
或者使用C++11

类包装器
{
公众:
包装器():sysUpTime{{1,3,6,1,2,1,1,3,0}{}
公众:
std::数组系统运行时间;
};

可以使用std::string存储OID,然后在
成员初始值设定项列表中初始化它,例如:

#include <string>
class Wrapper
{
public:
  Wrapper() : sysUpTime("1.3.6.1.2.1.1.3.0") { }
private:
  std::string sysUpTime;
};
#包括
类包装器
{
公众:
包装器():sysUpTime(“1.3.6.1.2.1.1.3.0”){}
私人:
字符串系统运行时间;
};
或者使用C++11

类包装器
{
公众:
包装器():sysUpTime{{1,3,6,1,2,1,1,3,0}{}
公众:
std::数组系统运行时间;
};

作为初始值设定项列表或字符串操作的替代方法,您可以使用以下内容(如果您确实想要):

struct包装器
{
模板
包装器(constchar&arr)[N]):vec(arr,arr+N){
向量向量机;
};
由于我长期的懒惰,我把一切都公之于众:)。然后,您可以这样初始化:

    char foo[] = { 1, 2, 3, 4, 5 };
    Wrapper bar(foo);

    copy(bar.vec.begin(), bar.vec.end(), ostream_iterator<int>(cout, ", "));
charfoo[]={1,2,3,4,5};
包装条(foo);
复制(bar.vec.begin(),bar.vec.end(),ostream_迭代器(cout,“,”);

作为初始值设定项列表或字符串操作的替代方法,您可以使用以下内容(如果您确实想要):

struct包装器
{
模板
包装器(constchar&arr)[N]):vec(arr,arr+N){
向量向量机;
};
由于我长期的懒惰,我把一切都公之于众:)。然后,您可以这样初始化:

    char foo[] = { 1, 2, 3, 4, 5 };
    Wrapper bar(foo);

    copy(bar.vec.begin(), bar.vec.end(), ostream_iterator<int>(cout, ", "));
charfoo[]={1,2,3,4,5};
包装条(foo);
复制(bar.vec.begin(),bar.vec.end(),ostream_迭代器(cout,“,”);

将不同大小的c样式数组传递给构造函数时,主要问题是必须同时传递大小。下面是将数组放入成员向量的示例:

#include <vector>
#include <iostream>

struct Test
{
  std::vector<char> sysUpTime;

  Test(const char sysUpTime[], size_t size) :
    sysUpTime(sysUpTime, sysUpTime + size)
  { }
};


int main()
{
  const char sysUpTime[] = {1,2,3,4,5};

  Test test(sysUpTime, sizeof(sysUpTime) / sizeof(char));
}
#包括
#包括
结构测试
{
向量系统运行时间;
测试(常量字符系统运行时间[],大小):
系统正常运行时间(系统正常运行时间,系统正常运行时间+大小)
{ }
};
int main()
{
const char sysUpTime[]={1,2,3,4,5};
测试(sysUpTime,sizeof(sysUpTime)/sizeof(char));
}

不幸的是,我知道如果不使用动态数组(向量),就无法做到这一点,除了使用模板之外,这意味着您将为数组大小的每次更改实例化一个单独的类。

将不同大小的c样式数组传递给构造函数时的主要问题是必须同时传递大小。下面是将数组放入成员向量的示例:

#include <vector>
#include <iostream>

struct Test
{
  std::vector<char> sysUpTime;

  Test(const char sysUpTime[], size_t size) :
    sysUpTime(sysUpTime, sysUpTime + size)
  { }
};


int main()
{
  const char sysUpTime[] = {1,2,3,4,5};

  Test test(sysUpTime, sizeof(sysUpTime) / sizeof(char));
}
#包括
#包括
结构测试
{
向量系统运行时间;
测试(常量字符系统运行时间[],大小):
系统正常运行时间(系统正常运行时间,系统正常运行时间+大小)
{ }
};
int main()
{
const char sysUpTime[]={1,2,3,4,5};
测试(sysUpTime,sizeof(sysUpTime)/sizeof(char));
}

不幸的是,我知道除了使用模板之外,没有使用动态数组(vector)是无法做到这一点的。模板意味着您将为数组大小的每一次更改实例化一个单独的类。

如果您使用的是C++11,那么您就有初始值设定项列表,否则您就无能为力了。如果您使用的是C++11,那么您可能会将它们切换到
boost | std::array
,否则您就没有什么可以做的了。也许可以将它们切换到
boost | std::array
谢谢@Billz。是
Wrapper():…
构造函数的缩写吗?我在C++中恢复了速度,我不熟悉那个语法。{被称为成员初始值设定项list@EhevuTov这是一个普通的语法,在一个Layar上被压缩了,谢谢。我认为C++ 18年前我没有学习过,或者我只是没有学到那么远。现在C++有像lambda函数这样的东西。谢谢@ Belz。………<代码> >构造函数的速写?我正在用C++加快自己的速度,我不熟悉那个语法。{被称为成员初始值设定项list@EhevuTov这是一个普通的语法,在一个Layar上被压缩了,谢谢。我认为18年前我没有学习过C++,或者我只是没有学到那么多。现在C++有了像lambda函数这样的东西。我提交并删除了一个答案,把数组的大小传递给构造函数,这是非常多的。呃,不知道大小可以用这样的模板推断:)很好,我提交并删除了一个答案,将大小和数组一起传递给构造函数,这更好。不知道大小可以用这样的模板推断:)msandiford的答案使用了一种更好的方式将大小传递给构造函数。msandiford的swer使用了一种更好的方法将大小传递给构造函数。