相关疑难解决方法(0)

C++ 11成员初始化列表与类内初始化程序?

在C++ 11中初始化对象成员变量的这些方法有何不同?还有另外一种方法吗?哪种方式更好(性能)?:

class any {
  public:
    obj s = obj("value");
    any(){}
};
Run Code Online (Sandbox Code Playgroud)

要么

class any {
  public:
    obj s;
    any(): s("value"){}
};
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ initialization c++11

38
推荐指数
3
解决办法
1万
查看次数

直接初始化与直接列表初始化(C++)

DIRECT-VS COPY-INITIALIZATION
通过这个问题(它是直接初始化还是复制初始化?)我学到了直接初始化复制初始化之间的区别:

direct-initialization                   copy-initialization
-----------------------                 ---------------------

obj s("value");                         obj s = obj("value");
                                        obj s = "value";

obj s{"value"};                         obj s = {"value"};
                                        obj s = obj{"value"};
Run Code Online (Sandbox Code Playgroud)

为了完整起见,我在这里提到它.我对此页面的实际问题列在下一段>>

 
直接初始化与直接列表初始化
答案显示,在直接初始化的范畴内,可以在直接初始化直接列表初始化之间产生差异.

obj s("value");   // direct-initialization

obj s{"value"};   // direct-list-initialization
Run Code Online (Sandbox Code Playgroud)

我知道列表初始化不允许缩小,这样初始化int x{3.5};就不会编译.但除此之外,我还有几个问题:

 
(1)
obj s("value");和之间的编译器输出有什么不同obj s{"value"};吗?
让我们考虑一个没有任何优化的编译器.我想知道任何可能的技术差异:-)

 
(2)也许我应该问一个多变量初始化完全相同的问题,例如:
obj s("val1", "val2");obj s{"val1", "val2"};

 
(3)我注意到列表初始化有时可以调用不同的构造函数,如:

vector<int> a{10,20};   //Curly braces -> fills the …
Run Code Online (Sandbox Code Playgroud)

c++ list-initialization c++17

9
推荐指数
2
解决办法
1386
查看次数

这是C++中的聚合初始化还是默认初始化?

考虑以下程序.

#include <iostream>
int main()
{
    int a=int{};
    std::cout<<a;
}
Run Code Online (Sandbox Code Playgroud)

它是使用聚合初始化还是默认初始化?我很迷惑.

c++ initialization aggregate-initialization

1
推荐指数
1
解决办法
123
查看次数