相关疑难解决方法(0)

链接C++ 17,C++ 14和C++ 11对象是否安全

假设我有三个编译对象,都是由相同的编译器/版本生成的:

  1. A是用C++ 11标准编译的
  2. B是用C++ 14标准编译的
  3. C是用C++ 17标准编译的

为简单起见,我们假设所有头文件都是用C++ 11编写的,只使用其语义在所有三个标准版本之间没有变化的构造,因此任何相互依赖性都用头包含正确表达,编译器没有反对.

这些对象的组合是什么,链接到单个二进制文件是不安全的?为什么?


编辑:欢迎涵盖主要编译器(例如gcc,clang,vs ++)的答案

c++ linker abi c++11 c++14

69
推荐指数
2
解决办法
6748
查看次数

堆栈溢出错误或异常?

为什么以下结果没有错误?

void func()
{
   func();
}

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

c++ recursion

10
推荐指数
3
解决办法
785
查看次数

构造函数或复制构造函数?

通用编程和STL(中文版)一书中,它说:

X x = X() 将调用复制构造函数.

这对我来说似乎有点奇怪.我写了一个像这样的测试程序

#include <iostream>

class Test {

public:

    Test() {
        std::cout << "This is ctor\n";
    }

    Test(const Test&) {
        std::cout << "This is copy-ctor\n";
    }

};

int main(int argc, char** argv)
{

    Test t = Test();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是"This is ctor".好的,现在我很困惑,这是对的吗?

c++ constructor copy-constructor

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

这个代码是否定义明确,无论复制省略?

考虑以下代码:

#include <iostream>

struct Test
{
    int x;
    int y;
};

Test func(const Test& in)
{
    Test out;
    out.x=in.y;
    out.y=in.x;
    return out;
}

int main()
{
    Test test{1,2};
    std::cout << "x: " << test.x << ", y: " << test.y << "\n";
    test=func(test);
    std::cout << "x: " << test.x << ", y: " << test.y << "\n";
}
Run Code Online (Sandbox Code Playgroud)

人们会期望这样的输出:

x: 1, y: 2
x: 2, y: 1
Run Code Online (Sandbox Code Playgroud)

这确实是我得到的.但由于复制省略,可能out在内存中的同一位置in并导致最后一行输出x: 2, y: 2

我试着用gcc和铿锵既编译 …

c++ undefined-behavior copy-elision

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