假设我有三个编译对象,都是由相同的编译器/版本生成的:
为简单起见,我们假设所有头文件都是用C++ 11编写的,只使用其语义在所有三个标准版本之间没有变化的构造,因此任何相互依赖性都用头包含正确表达,编译器没有反对.
这些对象的组合是什么,链接到单个二进制文件是不安全的?为什么?
编辑:欢迎涵盖主要编译器(例如gcc,clang,vs ++)的答案
为什么以下结果没有错误?
void func()
{
func();
}
int main()
{
func();
}
Run Code Online (Sandbox Code Playgroud) 在通用编程和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".好的,现在我很困惑,这是对的吗?
考虑以下代码:
#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和铿锵既编译 …