gpt4 book ai didi

c++ - 为什么在另一个文件中更改 extern const 时链接器不会失败?

转载 作者:太空狗 更新时间:2023-10-29 23:05:52 25 4
gpt4 key购买 nike

我有以下两个文件

//###########
//a.cpp
//###########
#include <iostream>

int main()
{
extern int var; //Why is this allowed?
std::cout << var << std::endl;
var = 99; //Core dump happens here
std::cout << var << std::endl;
return 0;
}

//###########
//b.cpp
//###########
extern const int var = 41;

在这里,编译和链接没有任何问题。当我运行时,我在尝试将“var”的值设置为 99 时得到核心转储。我想知道为什么允许我在 a.cpp 中声明一个非常量变量。链接器不应该链接失败吗?

最佳答案

从技术上讲,根据 C++ 标准,您的程序是“不正确的”。我不确定它最终是否会成为“未定义行为”或“你真的不应该这样做,这是错误的”的其他分类。

但是,编译器很难为链接器传递足够的信息来发现此类错误,因为链接器并不真正理解“你在做什么”(例如写入const 无效,但链接器不理解操作是写入 - 它只知道“您需要此处的 var 地址”。

由于您本质上是在欺骗编译器,所以您是在对自己这样做。 C 和 C++ 充满了您必须对编译器保持诚实的情况,否则事情可能会出错,但编译器并不总能帮助您发现这些问题(通常是因为很难以可靠的方式实现)。

关于c++ - 为什么在另一个文件中更改 extern const 时链接器不会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17677788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com