q****x 发帖数: 7404 | 1 类里的函数:
如果访问任何成员变量,必须成员函数。
但如果这个函数只是借用名空间的辅助函数呢?不访问静态变量,也不访问成员变量的
话,声明成静态函数更好?
class A {
public:
// SayHello is a helper function.
static void SayHello() { cout << "hello world!"; }
};
int main() {
A::SayHello();
} |
t****t 发帖数: 6806 | 2 "如果只访问静态变量,必须静态函数"
这又是哪里看来的?
【在 q****x 的大作中提到】 : 类里的函数: : 如果访问任何成员变量,必须成员函数。 : 但如果这个函数只是借用名空间的辅助函数呢?不访问静态变量,也不访问成员变量的 : 话,声明成静态函数更好? : class A { : public: : // SayHello is a helper function. : static void SayHello() { cout << "hello world!"; } : }; : int main() {
|
t*****n 发帖数: 4908 | 3 你最近跟c++干上了?C++ primer比较合适
【在 q****x 的大作中提到】 : 类里的函数: : 如果访问任何成员变量,必须成员函数。 : 但如果这个函数只是借用名空间的辅助函数呢?不访问静态变量,也不访问成员变量的 : 话,声明成静态函数更好? : class A { : public: : // SayHello is a helper function. : static void SayHello() { cout << "hello world!"; } : }; : int main() {
|
p***o 发帖数: 1252 | 4 Better get a real namespace instead of a class. C++ is not Java.
【在 q****x 的大作中提到】 : 类里的函数: : 如果访问任何成员变量,必须成员函数。 : 但如果这个函数只是借用名空间的辅助函数呢?不访问静态变量,也不访问成员变量的 : 话,声明成静态函数更好? : class A { : public: : // SayHello is a helper function. : static void SayHello() { cout << "hello world!"; } : }; : int main() {
|
q****x 发帖数: 7404 | 5 呵呵,又被抓包了。那您说何时必须要定义成静态函数?写singleton或类似需要时?
【在 t****t 的大作中提到】 : "如果只访问静态变量,必须静态函数" : 这又是哪里看来的?
|
N******K 发帖数: 10202 | 6 把一个类当函数用的时候 写一个静态成员函数 所有输入 所有输出都有
或者一些不依赖于成员变量的函数 可以写为静态函数
【在 q****x 的大作中提到】 : 呵呵,又被抓包了。那您说何时必须要定义成静态函数?写singleton或类似需要时?
|
N******K 发帖数: 10202 | 7 劝你还是学java 别在这丢人了
【在 q****x 的大作中提到】 : 类里的函数: : 如果访问任何成员变量,必须成员函数。 : 但如果这个函数只是借用名空间的辅助函数呢?不访问静态变量,也不访问成员变量的 : 话,声明成静态函数更好? : class A { : public: : // SayHello is a helper function. : static void SayHello() { cout << "hello world!"; } : }; : int main() {
|
q****x 发帖数: 7404 | 8 我才疏学浅,可你也别答非所问啊。
【在 N******K 的大作中提到】 : 劝你还是学java 别在这丢人了
|
g*********e 发帖数: 14401 | 9 当然设成静态。这样你就可以随时call it. 跟namespace里的函数类似。
要不还得创造个obj
【在 q****x 的大作中提到】 : 类里的函数: : 如果访问任何成员变量,必须成员函数。 : 但如果这个函数只是借用名空间的辅助函数呢?不访问静态变量,也不访问成员变量的 : 话,声明成静态函数更好? : class A { : public: : // SayHello is a helper function. : static void SayHello() { cout << "hello world!"; } : }; : int main() {
|
g*********e 发帖数: 14401 | 10 相当于utility function。
但要注意static function不能用到static member variable 否则哪天你想搞
multithreading了会出问题 |
|
|
t****t 发帖数: 6806 | 11 语法上没有什么时候是"必须"定义静态函数的.
【在 q****x 的大作中提到】 : 呵呵,又被抓包了。那您说何时必须要定义成静态函数?写singleton或类似需要时?
|
w******w 发帖数: 126 | 12 有时候也是写代码的人图方便 直接用class name 当作 namespace 来用.
懒着call 一个函数after 创建一个obj. Singleton 是用static 函数 跟 static 变量
的一个实际应用.
^_^ |
w******w 发帖数: 126 | 13 我不是很确定 在多线程下 static fuction 用 static member variable 会不会出问
题.
但是我想在 新的 C++ 11x 下 singleton 用到static 的 class 的 obj , 应该是
safe的. 不用加锁啥的.
貌似新的编译器能保证只能创建一个实例.
【在 g*********e 的大作中提到】 : 相当于utility function。 : 但要注意static function不能用到static member variable 否则哪天你想搞 : multithreading了会出问题
|
g*********e 发帖数: 14401 | 14
多个thread share一个static variable 肯定要出问题。除非是有意要这么做并且加锁。
cxx 11 有static class的feature? 前几天看到一个static if 震惊了
【在 w******w 的大作中提到】 : 我不是很确定 在多线程下 static fuction 用 static member variable 会不会出问 : 题. : 但是我想在 新的 C++ 11x 下 singleton 用到static 的 class 的 obj , 应该是 : safe的. 不用加锁啥的. : 貌似新的编译器能保证只能创建一个实例.
|
w******w 发帖数: 126 | 15
锁。
哦 maybe 你误解我的意思了.
我的意思是说支持 C++ 11x 的新编译器里面, 当你实现 singleton的时候.
1. 你用 static function
2. 你在这个 static function 里面做类似这样的操作
....
static Singleton & getInstance()
{
static Singleton s;
return s;
}
....
static Singleton s; 这里之前没有加锁的必要. 如果是旧的编译器起码要加上
mutex 来实现所谓的 thread safe, 当然就算加上 mutex 也未必能100% 实现thread
safe. 这是另一个话题. ^_^
但是在新的编译器下 static Singleton s; 这个是thread safe的 . 不用加 mutex 就
可以实现thread safe的 Singleton.
C++ 新标准里面当然木有 static class 这样的 feature.
不知道我解释的清楚不? ^_^
【在 g*********e 的大作中提到】 : : 多个thread share一个static variable 肯定要出问题。除非是有意要这么做并且加锁。 : cxx 11 有static class的feature? 前几天看到一个static if 震惊了
|
g*********e 发帖数: 14401 | 16
清楚了
that's too bad。 把c++弄得像高级语言一样了
【在 w******w 的大作中提到】 : : 锁。 : 哦 maybe 你误解我的意思了. : 我的意思是说支持 C++ 11x 的新编译器里面, 当你实现 singleton的时候. : 1. 你用 static function : 2. 你在这个 static function 里面做类似这样的操作 : .... : static Singleton & getInstance() : { : static Singleton s;
|
q****x 发帖数: 7404 | 17 所以这个thread-safe是取决于编译器的?支持C++11的编译器required to have this
feature, or nice to have?
【在 w******w 的大作中提到】 : : 锁。 : 哦 maybe 你误解我的意思了. : 我的意思是说支持 C++ 11x 的新编译器里面, 当你实现 singleton的时候. : 1. 你用 static function : 2. 你在这个 static function 里面做类似这样的操作 : .... : static Singleton & getInstance() : { : static Singleton s;
|