gpt4 book ai didi

c++ - 在不存在的对象上调用静态成员函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:08 25 4
gpt4 key购买 nike

类似的事情刚刚出现在另一个问题中并激起了我的兴趣。假设 Foo 声明如下:

struct Foo
{
static void bar() {std::cout << "Bar!";}
};

做这样的事情似乎工作得很好:

std::vector<Foo> v;
v[10].bar();

但是,这种用法真的合法吗?如果未将 bar() 声明为 static 会怎样?

最佳答案

doing something like this seems to work just fine:

这并不意味着它没问题。

请阅读http://c-faq.com/ansi/experiment.html罗杰·米勒 (Roger Miller) 有一个很好的类比:

“有人告诉我,在篮球比赛中你不能拿着球跑。我拿了一个篮球试了一下,效果很好。他显然不懂篮球。”

访问 v[10] 是未定义的行为。如果您在其上调用成员函数并不重要,即使只是访问 v[10] 也是未定义的。 (正如评论中指出的那样,即使在调用静态成员函数时也会计算对象表达式,恕我直言,这应该是显而易见的,因为 v[10] 未在未计算的上下文中使用,如 sizeof(v[10])decltype(v[10])).

您不能以“这似乎工作得很好”的观点编写 C++ 代码,并假设这意味着程序是正确的。

关于c++ - 在不存在的对象上调用静态成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46930702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com