- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
C++ 中有一个很好的特性,您可以说该函数的返回类型为“auto”,编译器会找出它。但是,如果我在出错时返回一个指针和 nullptr 怎么办?不知何故,编译器无法推断出正确的类型并给出错误。
在下面的简单示例中想象 std::vector<int>
计划在未来完全被其他东西取代,以证明在这里使用 auto 是合理的:
#include<vector>
std::vector<int> e;
auto test(){
if(!e.empty())
return &e[0];
return nullptr;
}
在 c++17 中,我收到以上错误消息。
所以我尝试用
替换最后一次返回 return reinterpret_cast<decltype(&e[0])>(nullptr)
并得到错误invalid cast
.我看到的唯一解决方案是用 3 行替换该返回:
auto out=&e[0];
out=nullptr;
return out;
我可能可以通过替换 auto
将其减少到 2 行用某种 decltype
,但我想其他类型的转换可以在一行中做我想做的事吗?还是我需要为这种情况使用更新版本的 c++ 标准?
我还尝试了 std::make_optional 并遇到了同样的问题,nullopt_t 的类型与 std::optional 不同。我真正喜欢的是编译器是否会自动将类型推断为 std::optional
无论如何...
最佳答案
只退一次。
auto test() {
return e.empty() ? nullptr : &e[0];
}
you should explain the issue with OPs code
有两个不同类型的返回。选择哪种类型?
and why this fixes it – 463035818_is_not_a_number
因为有超长的规则,条件运算符的结果是什么类型。参见 https://en.cppreference.com/w/cpp/language/operator_other#Conditional_operator
关于C++ 编译器说 "inconsistent deduction for auto return type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75267360/
我试图将要处理的元素类型限制为 std::array> , 但 N 的模板替换失败。 main.cpp:10:1: note: template argument deduction/substi
在我的代码中,我使用了模板化图像类 Image结合 std::shared_ptr .这些图像指针应该传递给各种图像处理函数,其中一些函数与图像类型无关。考虑以下 Image 的定义和两个处理函数 f
在 C++20 中,根据建议 Familiar template syntax for generic lambdas , 下面的代码正确推导出类型 T: auto lamTest = [](std:
在使用 GCC 4.7.2 和 Clang 3.1 编译一些 C++11 代码时,我遇到了一个问题,即 Clang 无法推断出 GCC 成功的模板参数。在更抽象的形式中,代码如下所示: src/tes
C++ 中有一个很好的特性,您可以说该函数的返回类型为“auto”,编译器会找出它。但是,如果我在出错时返回一个指针和 nullptr 怎么办?不知何故,编译器无法推断出正确的类型并给出错误。 在下面
我似乎找不到正确的方法来实现它,这似乎是最接近正确的方法,但我得到一个模板参数推导错误。谁能指出我哪里出错了? 我正在尝试将算术功能添加到 std::variant无需std::get第一的: #in
我写了下面的测试: #include #include #include #include #include // Works with std::function ! //std::fun
以下程序(使用标准随机数引擎)给出“模板参数推导/替换失败”编译错误: http://coliru.stacked-crooked.com/a/e3c3ac933ed7b958 /// LCE1.cp
我正在尝试创建一个函数,该函数接受任何类型的可变数量的参数,但即使是我制作的简单示例也会出现错误 #include #include template void callFunction(cons
当我尝试逐行读取命令行的输出时出现此错误: std::string exec(const char* cmd) { FILE* pipe = popen(cmd, "r"); if (!pip
“类模板的模板参数推导” 提案 ( P0091R2 ) 包含以下示例: template struct X { X(Ts...) }; X x1{1}; // OK X X x11; // OK X<
在temp.deduct.partial#8 ,有一个例子: template void f(Args... args); // #1 template void
简单的例子: const mapStateToProps = (state: State) => ({ error: state.error, // error: ?string }) type
我设计了一个对象,它接受一个函数及其参数,并将函数的返回值保存在对象中以供稍后检索。 我的目标是为这个对象创建一个推导指南,允许我在对象的构造函数中省略函数的返回类型。 #include templ
我是 C++ 的新手。 我写了一个非常简单的程序,如下所示 #include using namespace std; class index { protected: int count;
我编写了以下代码来测试模板特化。有没有办法让指针衰减到类型,以便我可以使用模板参数推导来获取我的 M 和 N,这样我就可以获得二维数组的行和列?我知道我可以为二维数组 vector 的 vector
我正在使用 gcc 8.0.0 201706 尝试一个关于 1z 的推导指南的示例(无法使用 clang 5.0.5 编译代码)。 namespace std { template std::
在这里,我实现了一个模板化函数和一个模板化 Lambda。我已经开始探索 C++14 功能,但不确定以下 lambda 有什么问题。有什么建议吗? #include #include #inclu
在英语语义中,“type deduction”等于“type inferring”吗? 我不确定 这只是不同语言设计者选择的成语偏好,或者 计算机科学给出了严格的“类型推导”定义, 哪个不是“类型推断
这里是代码示例。 a. int ii = 0; b. const int ci = ii; c. auto e = &ci; --> e is const int * d. auto &f = 42;
我是一名优秀的程序员,十分优秀!