Kno*_*oep 4 c++ static language-lawyer
这样的事情只是出现在另一个问题中,引起了我的兴趣.鉴于此Foo声明如下:
struct Foo
{
static void bar() {std::cout << "Bar!";}
};
Run Code Online (Sandbox Code Playgroud)
做这样的事似乎工作得很好:
std::vector<Foo> v;
v[10].bar();
Run Code Online (Sandbox Code Playgroud)
但是,这种用法实际上是否合法?如果bar()没有宣布static怎么办?
做这样的事似乎工作得很好:
这并不意味着没关系.
请阅读http://c-faq.com/ansi/experiment.html,它与Roger Miller有很好的比喻:
"有人告诉我,在篮球比赛中,你无法控球并且跑动.我得到了一个篮球并尝试了它并且效果很好.他显然不懂篮球."
访问v[10]是未定义的行为.如果你在它上面调用一个成员函数也没关系,即使只是访问v[10]是未定义的.(正如评论中所指出的,即使在调用静态成员函数时也会评估对象表达式,恕我直言应该是显而易见的,因为v[10]它不会在未评估的上下文中使用,例如sizeof(v[10])或decltype(v[10])).
你不能用"这似乎工作得很好"的观点来编写C++代码,并假设这意味着程序是正确的.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |