这在c ++中是否合法(是的,我知道它在.net中是合法的),如果是,那么它将如何/为什么会被使用?
static class foo{
public:
foo();
int doIt(int a);
};
Run Code Online (Sandbox Code Playgroud)
Ðаn*_*Ðаn 27
如果您使用的是C++/CLI,则实际的语法static是
ref class Foo abstract sealed /* abstract sealed = C# static */
{
};
Run Code Online (Sandbox Code Playgroud)
Ada*_*ras 22
不,这在C++中不受支持.static说明者在.NET中唯一做的就是强迫你让所有的类成员都是静态的; 它只是一个帮助关键字.要在C++中编写静态类,您需要做的就是确保将类中的每个成员标记为static.(编辑:和非公共构造函数,因此无法实例化您的"静态"类.)
C++中最接近的静态类是一个只有静态成员变量的类.这被称为单稳态模式.这样的类意味着该类的所有实例都具有相同的状态.monostate实例的用法语法类似于普通类(与单例类不同),实际上monostate类可以转换为常规类而不改变其任何用法.例如
// Monostate class
public class Administrator
{
private:
static int _userId;
public
int UserId() { return _userId; }
}
// Initializing the monostate value
int Administrator::_userId = 42;
// Using an instance of a monostate class
void Foo()
{
Administrator admin = new Administrator();
Assert.Equals( 42, admin.UserId() ); // will always be 42
}
Run Code Online (Sandbox Code Playgroud)
staticC++中文件级作用域的修饰符表示标记的标识符static仅在定义它的文件中可见.这种语法在类(仅方法和变量)中不可用,但是对于使用匿名命名空间的类可以获得类似的效果:
namespace{
class Foo{};
};
Run Code Online (Sandbox Code Playgroud)