gpt4 book ai didi

c++ - 在 C++ 的头文件中使用常量并在程序中询问它们的地址的任何潜在危险

转载 作者:行者123 更新时间:2023-11-28 01:28:50 28 4
gpt4 key购买 nike

我在头文件中定义常量并包含在我项目的源文件中。 C++ 编译器通常不会为这些常量创建存储并将它们的链接保持为内部。如果我在我的程序中请求任何常量的地址,编译器将被迫为该常量变量创建一个存储空间。我的问题是,如果编译器正在为常量变量创建存储,变量的链接是否也会受到影响?因为如果链接是外部的,我会在编译时遇到链接错误。当我将指针指向包含的头文件(需要常量的地址)的常量时,我​​的测试程序没有给出任何链接错误。如果有人能简要解释 C++ 中存储和链接的概念,或者指导我在某处找到一些很好的解释,我将不胜感激。提前致谢。

//in constants.h
const double UNIT_LENGTH = 1e-10;
//in constants.cpp
#include "constants.h"
const double * temp = &UNIT_LENGTH;
//in main
#include "constants.h"
double A = UNIT_LENGTH; //why there is no linking error

最佳答案

Const 限定变量具有内部链接。在2012年的标准中3.5/3中的写法是

A name having namespace scope (3.3.6) has internal linkage if it is the name of [...]

  • a variable that is explicitly declared const or constexpr and neither explicitly declared extern nor previously declared to have external linkage

“命名空间范围”包括全局命名空间。

是否在头文件中声明它们无关紧要,但请注意,在每个翻译单元中,头文件将定义不同的对象。这通常无关紧要,因为它是常量,除非您想跨翻译单元比较地址。

关于c++ - 在 C++ 的头文件中使用常量并在程序中询问它们的地址的任何潜在危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52569609/

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