小编gen*_*ata的帖子

显式默认构造函数

此代码与GCC 5.X,MSVC编译良好,但GCC 6.X给出错误:

"从初始化列表转换为'a'将使用显式构造函数'a :: a()'",clang "选择的构造函数在复制初始化中是显式的".

删除explicit或更改以a c{}解决问题,但我很好奇为什么它以这种方式工作.

class a
{
public:
    explicit a () {}
};
struct b
{
    a c;
};

int main() {
    b d{};
}
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++11 c++14

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

有条件的?:具有类构造函数的运算符

有人可以解释我为什么,cc1以不同的方式构建.我明白我参考了'?'创建的副本 操作员,在施工后被摧毁,但为什么在第一种情况下它表现出其他方式.我已经测试过它的优化,但即使从控制台读取条件,我也有相同的结果.提前致谢

#include <vector>

class foo {
public:
    foo(const std::vector<int>& var) :var{ var } {};
    const std::vector<int> & var;
};

std::vector<int> f(){
    std::vector<int> x{ 1,2,3,4,5 };
    return x;
};

int main(){
    std::vector<int> x1{ 1,2,3,4,5 ,7 };
    std::vector<int> x2{ 1,2,3,4,5 ,6 };
    foo c{ true ? x2 : x1 };    //c.var has expected values 
    foo c1{ true ? x2 : f() };  //c.var empty 
    foo c2{ false ? x2 : f() };  //c.var empty 
    foo c3{ x2 …
Run Code Online (Sandbox Code Playgroud)

c++ conditional-operator c++14

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