C++ C+中的对象数组初始化+;

C++ C+中的对象数组初始化+;,c++,C++,我想创建一个对象数组。当前我使用的是std::stringa[10]一种语法,但我不确定这样做是否是最佳实践 首先,std::string a[10]是否实际调用构造函数并为10个字符串分配内存?我认为std::stringa声明了a,但没有将对象绑定到它(我可能错了)。那么std::stringa[10]呢 第二,在通过std::string a[10]“声明”数组之后(如果我没有弄错声明),如何初始化元素?我的困惑见下文 这给出了一个错误: std::mutex a[100]; for (i

我想创建一个对象数组。当前我使用的是
std::stringa[10]
一种语法,但我不确定这样做是否是最佳实践

首先,std::string a[10]是否实际调用构造函数并为10个字符串分配内存?我认为
std::stringa
声明了
a
,但没有将对象绑定到它(我可能错了)。那么std::stringa[10]呢

第二,在通过
std::string a[10]
“声明”数组之后(如果我没有弄错声明),如何初始化元素?我的困惑见下文

这给出了一个错误:

std::mutex a[100];
for (int i = 0; i<100; i++)
{
    a[i] = std::mutex(); // error;
}
std::互斥a[100];
对于(int i=0;i
我可能错了

<>你肯定错了。你把C++误认为是其他语言,可能是java或C语言。< /P> 在C++中,当你说“代码> STD::String S;”时,你有一个<>代码> STD::String ,它被完全初始化和构造。对于数组类型,这也是正确的。

另外,专业提示:去掉C数组,使用
std::array
,它会更好

至于示例之间的区别,它们都是不好的做法,但第一种做法是非法的,主要是因为
互斥体是一种特殊的花,它是不可移动的,这非常罕见,但在技术上是合法的,你所做的是不好的行为,但应该被允许

如果您想在这样的循环中构造对象,您可能应该查看
std::vector
,然后在循环中使用
push_back
,因为这样可以避免不必要的默认构造要求和随机的MAX_SIZE常量

我可能错了

<>你肯定错了。你把C++误认为是其他语言,可能是java或C语言。< /P> 在C++中,当你说“代码> STD::String S;”时,你有一个<>代码> STD::String ,它被完全初始化和构造。对于数组类型,这也是正确的。

另外,专业提示:去掉C数组,使用
std::array
,它会更好

至于示例之间的区别,它们都是不好的做法,但第一种做法是非法的,主要是因为
互斥体是一种特殊的花,它是不可移动的,这非常罕见,但在技术上是合法的,你所做的是不好的行为,但应该被允许

如果您想在这样的循环中构造对象,您可能应该查看
std::vector
,然后在循环中使用
push_back
,因为这样可以避免不必要的默认构造要求和随机的MAX_SIZE常量

首先,std::string a[10]是否实际调用构造函数并为10个字符串分配内存

是的。如果要手动初始化实例,请使用指针数组或就地分配(在堆栈上)

其次,在通过std::string a[10]对数组进行“声明”之后(如果我没有弄错声明的话),如何初始化元素?请参阅下面我的混淆

数组元素由无参数构造函数初始化。在代码中为元素指定不同的值。有些对象允许,有些不允许

首先,std::string a[10]是否实际调用构造函数并为10个字符串分配内存

是的。如果要手动初始化实例,请使用指针数组或就地分配(在堆栈上)

其次,在通过std::string a[10]对数组进行“声明”之后(如果我没有弄错声明的话),如何初始化元素?请参阅下面我的混淆


数组元素是由一个无ARGS构造函数初始化的。在你的代码中,你可以给元素分配一个不同的值。一些对象允许这个,有些不。布瑞恩:是的,我得到了基本错误。在爪哇,<代码> T A(100);一个[0 ] =新的T-();100个字符串,然后做一个气球,并把第一个字符串连接到气球上。C++中,<代码> T A(100)。“0”=T-(),然后制作100个气球,然后再弹出另一个气球,弹出第一个气球,把新气球放在它的位置。“布瑞恩,是的,我得到了基本错误……在爪哇,<代码> T A[ 100 ];[0 ] =新的T-();< /Case>制作100个字符串,然后制作一个气球并将第一个字符串附加到气球上。C++,<代码> T A[100];a[0]=T();

制作100个气球,然后制作另一个气球,弹出100个气球中的第一个气球,并将新气球放回原位。不能弹出互斥体。
std::thread a[100];
for (int i = 0; i<100; i++)
{
    a[i] = std::thread(func, NULL);
}