作为这个问题的补充,这里发生了什么:
#include <string>
using namespace std;
struct A {
string s;
};
int main() {
A a = {0};
}
Run Code Online (Sandbox Code Playgroud)
显然,你不能将std :: string设置为零.有人可以提供一个解释(请参考C++标准,请参考)这里应该发生什么?然后解释一下):
int main() {
A a = {42};
}
Run Code Online (Sandbox Code Playgroud)
这些都是明确界定的吗?
对我来说又一个令人尴尬的问题 - 我总是给我的结构构造者,所以这个问题从未出现过.
再次编辑,因为我最初并不清楚我是否正在尝试在编译时初始化数组,而不是在运行时...
我有以下简化的测试用例:
typedef struct TestStruct
{
int length;
int values[];
};
TestStruct t = {3, {0, 1, 2}};
TestStruct t2 = {4, {0, 1, 2, 3}};
int main()
{
return(0);
}
Run Code Online (Sandbox Code Playgroud)
这适用于Visual C++,但不能在linux下用g ++编译.任何人都可以帮助我使这种特定的初始化器可移植吗?
其他细节:我正在使用的实际结构有几个其他int值,并且数组的长度范围可以从单个条目到超过1800个条目.
编辑:我认为(但不确定)这不是VLA问题.为了澄清,我正在尝试让编译器在编译时为我完成工作.运行时数组的长度是不变的.如果我错了,请道歉; 我主要是ac#/ Perl/Ruby程序员,他们坚持维护这个遗留应用程序......
任何帮助非常感谢.谢谢!
我仍在赚取我的C++翅膀; 我的问题是,如果我有这样的结构:
struct Height
{
int feet;
int inches;
};
Run Code Online (Sandbox Code Playgroud)
然后我有一些像这样的行:
Height h = {5, 7};
Person p("John Doe", 42, "Blonde", "Blue", h);
Run Code Online (Sandbox Code Playgroud)
我喜欢通过花括号初始化结构,但我更喜欢上面的一行,在一个匿名的Height结构中.我该怎么做呢?我最初的天真方法是:
Person p("John Doe", 42, "Blonde", "Blue", Height{5,7});
Run Code Online (Sandbox Code Playgroud)
但这并没有奏效.我离标记太远了吗?