C++ 变量可见性
c++ variable visibility
请先阅读第二篇编辑。
我正在寻找详细解释 c/c++ 内存管理模型的书籍或网站。 我试图理解的一件事是:
namespace A {
SomeClass A;
}
与
namespace A {
static SomeClass A;
}
与
SomeClass A;
与
static SomeClass A;
谢谢。
编辑:很抱歉造成混乱,我将概念混合在一起,并问了错误的问题。
命名空间允许将类、对象和函数等实体分组到一个名称下。这样,全局作用域可以划分为"子作用域",每个子作用域都有自己的名称。
使用关键字 using
将命名空间中的名称引入当前声明性区域。
例如:不使用命名空间,您将编写: #include
int main () {
std::cout << "Hello world!n";
return 0;
}
但是,您也可以编写: #include 使用命名空间标准;
int main () {
cout << "Hello world!n";
return 0;
}
这允许您不在每个之前附加 napespace 标识符
C++静态类与其他OOP语言不同没有任何意义。可以使用静态数据成员方法。
相反,您可以创建:
1.类中的静态方法
class SomeClass
{
public: static void myMethod(int x..)
{
}
}
2.在命名空间中创建自由函数
namespace A
{
void myMethod(int x..)
{
}
}
当您不需要对象时,后者更适合。没有类没有对象...
在这两种情况下,将类括在命名空间中都允许您将实体分组到公用名下。
首先,命名空间只有在编译之前才知道,之后它们就不存在了。也就是说,你的前半部分与最终节目的后半部分没有什么不同,至少据我所知。如果我错了,请纠正我。
然后,如果static SomeClass A
和SomeClass A
都在全局范围(文件级别),那么它们也是相同的。
接下来,如果两个声明都在 class
、 struct
或函数内,那么static
版本也将放入可执行文件的数据段中,而非static
变体将是普通的堆栈变量。
再次,如果我错了,请纠正我,但据我所知,仅此而已。
相关文章:
- 如何更改唯一指针向量的可见性
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 限制静态库中符号的可见性 (MSVC/Visual C++)
- 班级成员可见性C++
- 内联模板函数的可见性
- Clang 是否可以在使用可见性属性时生成导入库(不带 __declspec(dllexport))?
- 是否允许编译器优化掉局部易失性变量
- std::mutex 的发布-获取可见性保证是否仅适用于关键部分?
- 符号可见性和 gcc 警告
- C++/libscreen 无法更新可见性
- 在 C++11 线程中,std::mutex 对内存可见性有什么保证?
- C++继承构造函数的可见性
- CRTP - 嵌套叶类类型的可见性
- C++模板 - 实例之间的通用操作和成员可见性
- 放松的订单和线程间可见性
- MPI 中变量的可见性
- 隐藏 c++ 源文件中变量的可见性
- Qt/C++ 跨类实例的共享变量和可见性
- C++ 变量可见性
- 实例化对象变量可见性