C++11 使用默认构造函数初始化结构的公共成员
给定一个具有如下默认构造函数的玩具C++11 使用默认构造函数初始化结构的公共成员,c++11,initialization,C++11,Initialization,给定一个具有如下默认构造函数的玩具struct: struct RGB { unsigned char r, g, b; RGB() :r(0), g(0), b(0) {} }; 假设我没有访问源代码的权限来添加自己的构造函数,那么如何将其初始化为特定的颜色呢 我不完全理解为什么这些不起作用: // OK, I can sort-of accept this one RGB red = {255, 0, 0}; // Not shorthand for
struct
:
struct RGB {
unsigned char r, g, b;
RGB()
:r(0), g(0), b(0) {}
};
假设我没有访问源代码的权限来添加自己的构造函数,那么如何将其初始化为特定的颜色呢
我不完全理解为什么这些不起作用:
// OK, I can sort-of accept this one
RGB red = {255, 0, 0};
// Not shorthand for green.r=0, green.g=255, green.b=0;?
RGB green = {.r = 0, .g = 255, .b = 0};
// I seem to be missing a constructor that accepts a list?
RGB blue{0, 0, 255};
有没有其他的C++11方法可以缩短好的老式程序:
RGB yellow;
yellow.r = 255;
yellow.g = 255;
yellow.b = 0;
此外,我如何最低限度地修改
struct
声明,以支持上述任何一种,并拥有默认的初始化方法。如果无法向结构的构造函数添加默认参数,那么助手函数如何:
RGB makeRGB(unsigned char r, unsigned char g, unsigned char b)
{
RGB result;
result.r = r;
result.g = g;
result.b = b;
return result;
}
可以这样使用:
RGB red = makeRGB(255, 0, 0);
将处理临时问题,并提供无开销的解决方案,除非您使用的是糟糕的编译器
理想的解决方案是修改默认构造函数以采用可选参数:
struct RGB {
unsigned char r, g, b;
explicit RGB(unsigned char r, unsigned char g, unsigned char b)
:r(r), g(g), b(b) {}
RGB() : RGB(0, 0, 0) {}
};
可以像您期望的那样使用:
RGB red(255, 0, 0);
RGB green{0, 255, 0};
RGB blue;
blue.b = 255;
.如果无法将默认参数添加到结构的构造函数中,那么助手函数如何:
RGB makeRGB(unsigned char r, unsigned char g, unsigned char b)
{
RGB result;
result.r = r;
result.g = g;
result.b = b;
return result;
}
可以这样使用:
RGB red = makeRGB(255, 0, 0);
将处理临时问题,并提供无开销的解决方案,除非您使用的是糟糕的编译器
理想的解决方案是修改默认构造函数以采用可选参数:
struct RGB {
unsigned char r, g, b;
explicit RGB(unsigned char r, unsigned char g, unsigned char b)
:r(r), g(g), b(b) {}
RGB() : RGB(0, 0, 0) {}
};
可以像您期望的那样使用:
RGB red(255, 0, 0);
RGB green{0, 255, 0};
RGB blue;
blue.b = 255;
.给定
struct color
{
color(std::initializer_list<float> list) = delete;
float r, g, b;
};
struct-color
{
颜色(标准::初始值设定项列表)=删除;
浮子r,g,b;
};
color c={1,2,3}
和color c{1,2,3}
是相同的color c={.r=0.g=255.b=0}代码>是C语言的专用语言,不是C++。
color c={1,2,3}代码>在C++11中非常好。它被称为。它甚至覆盖了初始值设定项列表中的显式构造函数。链接描述了如何显式删除它
color c({1,2,3})
给定
struct-color
{
颜色(标准::初始值设定项列表)=删除;
浮子r,g,b;
};
color c={1,2,3}
和color c{1,2,3}
是相同的
语法类似于color c={.r=0.g=255.b=0}代码>是C语言的专用语言,不是C++。
color c={1,2,3}代码>在C++11中非常好。它被称为。它甚至覆盖了初始值设定项列表中的显式构造函数。链接描述了如何显式删除它
color c({1,2,3})
“理想解决方案”并不那么理想-它定义了从无符号字符到RGB
的隐式转换。谢谢,我可能是想得太多了。我应该向生成有问题的标题的项目提交一份错误报告/更改请求,看看它们是否可以生成更易于初始化的构造函数。“理想解决方案”并不那么理想-它定义了从无符号字符
到RGB
的隐式转换。谢谢,我可能是想得太多了。我应该向生成有问题的标题的项目提交一个bug报告/更改请求,看看它们是否可以使构造函数对初始化更加友好。