|
|
1
9
为什么你不能这样做:
像这样,让计算函数变成工厂函数? |
|
|
2
5
首先,你可以做坏事:在computeimportantconstants()中丢弃const并将值放在那里。但是不要这样做,因为这样你就对编译器撒谎,它会试图找到最糟糕的回报方式。 第二: 这样做:
您仍然可以通过使这个类成为某种单例类来改进它(因为您只希望计算一次)。 |
|
|
3
3
你可以移动
|
|
|
4
2
这是正确的;但是,您可以初始化一个单独的成员——它是一个常量结构。见下文。
我不认为getter函数会低劣。编译器很可能会内联它们。考虑一下:
自从
对常量的访问(最有可能)和以前一样高效:对于内联函数的建议和编译器非常有可能这样做,因为getter非常小。 |
|
|
5
2
为了修正被接受的答案,请注意,对于C++ 11,你可以做非常巧妙的技巧。例如,您的原始问题可以通过lambda和构造委托来解决,如下所示:
或者更好的是,将初始化代码从
实际上,使用lambda调用初始化常量成员是一个非常方便的技巧,特别是因为您还可以将参数绑定和/或传递到lambda。使用构造委托有助于简化成员的初始化,这些成员可以最好地一起初始化,也可以相互依赖。 但是,在使用构造委托时要格外小心,因为函数调用(或构造函数调用)的函数参数的初始化顺序未定义,并且最终可能会以错误的顺序初始化某些内容,或者以在某些内容失败或引发异常时可能导致资源泄漏的方式初始化某些内容。 |
|
|
6
1
只需将事物拆分为易于初始化的部分和复杂部分,然后通过复制构造函数初始化复杂部分:
|
|
|
7
1
像这样的情况怎么样:
|
|
8
1
上面的回答似乎都没有注意到一个细节:
换句话说:这些是全局常量。正如你所猜测的那样,
无论如何,我们的想法是使用一个助手结构。
当然,在一个真正的程序中,我鼓励您将常量实际包装在某种接口后面,用这种方式公开它们是非常糟糕的做法,因为这样做会使更改它们(使用另一种类型)非常困难。 还要注意,输出参数不需要指针,普通引用需要指针。 |
|
|
Tom Buck · c#程序在整数列表上冻结 7 年前 |
|
|
Ran Lavi · 在c中初始化结构的指针++ 7 年前 |
|
|
Js_zero · 在c++中实例化对象有几种方法,它们之间有什么区别 7 年前 |
|
|
jfernal · 节点。js在加载其他函数之前等待初始化变量 7 年前 |
|
|
Victor · 在javafx中运行时更改标签文本 7 年前 |
|
|
blubb · 在Kotlin中是否有更惯用的方法来初始化此映射? 7 年前 |
|
|
Bing Bang · 初始化包含字节数组的结构数组 7 年前 |