![]() |
1
11
|
![]() |
2
6
在运行时没有这样的事情,因为它在C++中是一种非动态语言。 但是,您可以在sizeof中使用它来测试它是否在编译时存在而没有副作用。
如果var不存在,将停止编译。 |
![]() |
3
1
正如已经说过的,C++运行时系统不支持查询变量是否被声明。一般来说,C++二进制文件不包含关于变量符号或它们的映射到它们的位置的信息。从技术上讲,这些信息可以用调试信息编译成二进制文件,您当然可以查询调试信息,以查看代码中给定位置是否存在变量名,但这充其量只是一个肮脏的黑客行为(如果您想知道它会看到什么,我发布了一个糟糕的代码片段@ Call a function named in a string variable in C 它使用dwarf调试信息通过字符串调用C函数。不建议这样做) |
![]() |
4
1
微软对C++有两个扩展名:
如果您真的需要这样的功能,您可以将所有变量添加到一个集合中,然后查询该集合中的变量存在。 |
![]() |
5
0
已经提到C++没有提供这样的功能。
另一方面,在某些情况下,操作系统实现机制
关闭
到
|
![]() |
6
0
不,它不像你有一个运行在C++周围的运行系统,它在一些表(元数据)中记住名字的变量,并允许你通过动态生成的字符串访问变量。如果您想要这样做,您必须自己构建它,例如使用一个将字符串映射到某些对象的std::map。 一些编译时机制将适合该语言。但我不认为这有什么用。 |
![]() |
7
0
为了首先实现这一点,您需要实现一个动态变量处理系统,或者至少在互联网上找到一些。如前所述,C++被设计成一种本地语言,因此没有内置的工具来实现这一点。 对于最简单的解决方案,我可以建议创建一个带有字符串键的std::map,用boost::any、wxvariant或类似的方法存储感兴趣的全局变量,并将变量存储在此映射中。您可以通过一个预处理器指令来定义一个变量的名称,从而使您的生活变得更加简单,因此您不需要重新键入变量的名称两次。另外,为了让生活更容易,我建议创建一个访问这个变量映射的内联函数,并检查给定的字符串键是否包含在映射中。 在许多地方都有这样一个功能的实现,运行时属性处理系统以不同的方式可用,但是如果您只需要这个功能,我建议您自己实现,因为这些解决方案中的大多数都是您可能不需要的非常通用的。 |
![]() |
8
0
您可以创建这样的函数,但它不会操作字符串。您必须发送变量名。这样的函数将尝试向变量添加0。如果它不存在,则会发生错误,因此您可能希望尝试使用
|
![]() |
AstralHex · 矩阵乘法代码工作不正常 7 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 7 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 7 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 8 月前 |