gpt4 book ai didi

c++ - 有没有办法强制 "most vexing parse"成为错误,即使是逐个类?

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

是否有可能(对 A 类进行任何修改)进行以下工作?即,使最令人烦恼的解析错误?

class A {
};

int main() {
A a(); // can this be forced to be an error??
A b; // this should work
}

最佳答案

A 的任何修改都不会影响声明 A a(); 的解析方式。解析器甚至在查看 A 的定义之前就确定这是一个函数声明。事实上,A 的定义甚至不需要可见来解析这个语句;预先声明就足够了。

但是,编译器通常会对此发出警告,您可能会将其变成错误。例如,对于 clang,您可以使用标志 -Werror=vexing-parse

struct A;

A a(); // no error

int main() {
A a(); // error
}

clang++ -std=c++11 -Weverything -Werror=vexing-parse main.cpp

main.cpp:6:8: error: empty parentheses interpreted as a function declaration [-Werror,-Wvexing-parse]
A a();
^~
main.cpp:6:8: note: replace parentheses with an initializer to declare a variable
A a();
^~
{}
1 error generated.

尽管从技术上讲 A a(); 并不是最令人头疼的解析语法。那将是:

A a(B());

关于c++ - 有没有办法强制 "most vexing parse"成为错误,即使是逐个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19009306/

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