【发布时间】:2024-01-08 10:37:01
【问题描述】:
在 Haskell 中有一个名为 undefined 的常量,您可以使用它
声明一个函数而不定义它(即一个空主体的函数原型),就像squarein
square :: Int -> Int -- declaration
square = undefined -- empty definition
main = putStrLn.show.square $ 3
这对于推迟 square 的工作并首先专注于正确获取 main 函数非常有用,因为 Haskell 编译器确保整个文件编译时就像定义了 square 一样。
C++ 等价物是
#import <iostream>
int square(int x){
//TODO incomplete
return 0;
}
int main() {
std::cout << square(3);
}
我的意图是调用像clang++ 这样的编译器作为main 的类型检查器,然后再处理square。想象一下,square 确实是许多尚未定义的复杂函数之一,它们返回具有非平凡构造函数的复杂数据结构。我必须编写大量代码来创建可返回对象,只是为了编译函数。
在 C++ 中是否存在类似于 undefined 的简单粗暴的东西?
【问题讨论】:
-
链接器是编译后的一步。当您收到该错误时,您的代码已经通过了编译器的类型检查。
-
有什么你想在这里实现的,因为这是一个微不足道的例子,你的真实案例可能不需要这个就可以解决
-
我并没有真正看到它的用途,你可以暂时给它一个空定义,但如果你想要类似的行为(例如崩溃),你可以使用一个宏来定义类似这样的东西:
#define UNDEFINED{_ASSERT(0)},然后在你的函数声明之后使用它,但正如@EdChum 提到的,可能有更好的方法来解决你的实际问题 -
undefined对严格的语义没有那么有用。如果你只是想避免定义一个函数,给它一个{ throw "undefined"; }body。 -
@xEric_xD
undefined的一个用途是编译器会告诉你它期望在你使用过undefined的地方是什么类型,这在像someGenericLibraryFn (someAbstractHelper undefined) 42这样的调用中通常非常有用,其中类型函数的签名可能有点长,您只想查看类型签名的 那一部分。我不知道@mahene 是否希望从 C++ 中获得该功能……
标签: c++ haskell undefined-function