c++ - 除了语义和句法之外,程序是否有任何其他级别可以正确或不正确?这与 SFINAE 有何关系?
问题描述
tl;博士
我想了解我可以对非工作代码发表以下评论的逻辑:
- 哦,很明显它失败了,第 5 行有语法错误
- 嗯,看,我认为在第 10 行和第 13 行之间存在语义错误
- 不,你不能调用变量
a±b
,这是一个词法错误 - 在第 50 行有一个 X 错误,对于除了语义和句法之外的任何X类型的错误。
原始问题
我添加 C++ 是因为我使用了该语言的示例,以及language-lawyer标记以防答案取决于语言,即使我的问题更笼统。
如果我用 C++ 编写这段代码,
x x x;
它不会编译时出现这样的错误
$ g++ -std=c++17 uffa.cpp && ./a.out
uffa.cpp: In function ‘int main()’:
uffa.cpp:4:6: error: expected ‘;’ before ‘x’
4 | x x x;
| ^~
| ;
我的理解是这x x x;
在语法上是错误的。病态是一个更好的术语?还是语法错误?
另一方面,编码这个
s.append("!");
可以是有效的,例如如果它前面是std::string s{"Ciao"};
,或者是无效的,例如如果前面是int s{3};
,在后一种情况下,错误是这样的
$ g++ -std=c++17 uffa.cpp && ./a.out
uffa.cpp: In function ‘int main()’:
uffa.cpp:5:7: error: request for member ‘append’ in ‘s’, which is of non-class type ‘int’
5 | s.append("!");
| ^~~~~~
尽管错误具有相同的“形状”,但我的理解是,后一个错误与代码在与第一个示例不同的“级别”上无效有关。它在语义上是否无效/不正确/格式错误?
这种错误的“分类”与 SFINAE 和if constexpr
?
解决方案
推荐阅读
- python - 如何在 Mac 的 python3 中使用 Speech_recognition(我下载了但没有找到 PyAudio)
- ios - 开发和分发多个 XCFrameworks 的最佳方式
- python - map 仅在 tuple() 内部时有效
- swing - 最小化可调整大小的 JDialog
- azure-devops - 无法在 DevOps 中将用户添加到我的组织
- c# - 如何将 XML 文件中的问题添加到列表类型中
- azure - 错误 403 使用 Microsoft Graph 创建在线会议并且权限正确
- python - 没有从 pytesseract 得到正确的结果
- nlog - Akka.Net 记录到文件
- java - 服务器客户端文件传输程序出错?