我正在使用一些代码,这些代码广泛使用返回指向静态局部变量的指针的习惯用法.例如:
char* const GetString()
{
static char sTest[5];
strcpy(sTest, "Test");
return sTest;
}
Run Code Online (Sandbox Code Playgroud)
我认为这是安全的吗?
PS,我知道这是做同样事情的更好方法:
char* const GetString()
{
return "Test";
}
Run Code Online (Sandbox Code Playgroud)
编辑: 道歉,功能签名当然应该是:
const char* GetString();
Run Code Online (Sandbox Code Playgroud) 我想尝试一个简单的类来进行唯一的ID转换.我正在考虑添加一个静态方法:
class A {
static int const *GetId() {
static int const id;
return &id;
}
};
Run Code Online (Sandbox Code Playgroud)
然后每个类将通过唯一标识int const *.这保证有效吗?返回的指针真的是唯一的吗?有没有更简单的解决方案?
我也想过指向std::type_info:
class A {
static std::type_info const *GetId() {
return &typeid(A);
}
};
Run Code Online (Sandbox Code Playgroud)
那个更好吗?
编辑:
我不需要使用id进行序列化.我只想识别一小组基类,并希望某些类的所有子类具有相同的id
C/C++:我可以从外部访问函数内的静态变量吗?例如:
#include <iostream>
using namespace std;
void f()
{
static int count = 3;
cout << count << endl;
}
int main(int argc, char** argv)
{
f::count = 5; // apparently this is an invalid syntax.
f();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 刚刚开始学习 C++,遇到了这个示例,其中函数返回对局部静态变量的引用。
int& fun() {
static int x = 10;
return x;
}
int main() {
int &z = fun();
cout << fun() << " ";
z = 30;
cout << fun();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该线有什么int &z = fun();作用?我们是否将一个引用存储在另一个引用中?我是这门语言的新手,我所知道的是引用变量就像别名一样引用变量。谁能解释一下这是如何工作的?