小编Mar*_*zek的帖子

为什么我们不能在C ++中进行三向比较?

概括一下,为什么不2 < x < 9等于2 < x && x < 9

这是我编写的测试代码:

#include <iostream>

int main()
{
    int nums[] = { 5 , 1, 10};

    // We are gonna check if the number is in the range 2 - 9 
    for (auto e : nums)
    {
        if (2 < e < 9)
            std::cout << "2 < " << e << " < 9" << std::endl;

        if(2 < e && e < 9)
            std::cout << "2 < …
Run Code Online (Sandbox Code Playgroud)

c++

18
推荐指数
2
解决办法
1888
查看次数

为什么关联容器的擦除的异构版本需要转发引用?

erase关联容器中的异构版本(std::mapstd::unordered_map和)采用转发引用而所有其他异构函数(/ 、、)采用常量引用,std::multimap是否有任何特殊原因?std::unordered_multimapfindequal_rangecountcontains

例如在以下情况std::unordered_map

template<class K> iterator find(const K& k);
template<class K> const_iterator find(const K& k) const;
template<class K> size_type erase(K&& x);
Run Code Online (Sandbox Code Playgroud)

https://en.cppreference.com/w/cpp/container/unordered_map/erase(重载 4) https://en.cppreference.com/w/cpp/container/unordered_map/find(重载 3/4)

(最新工作草案) n4910第 24.5.4.1 节

(如上所述,这也适用于其他容器。)

c++ language-design c++23

5
推荐指数
1
解决办法
162
查看次数

除非另有说明,如何强制模板类使用指定的类型?

我的模板类有问题。我这样指定了模板类的默认类型:

template < class T = float >
class apple { 
public:
    T x;
    apple(T x): x(x) {}
}
Run Code Online (Sandbox Code Playgroud)

但是,当我创建这样的对象时:

apple obj(2);
Run Code Online (Sandbox Code Playgroud)

除非我这样做,否则类型将变成int:

apple<float> obj(2);
Run Code Online (Sandbox Code Playgroud)

我如何使其保持漂浮?

c++ templates class template-specialization

4
推荐指数
1
解决办法
63
查看次数

将无参数泛型 lambda 转换为函数指针

我正在尝试将无参数通用 lambda 转换为函数指针。此问题通常适用于泛型 lambda,其参数不依赖于模板实参。

示例尝试使用一个参数 () 来转换 lambda int,该参数在类型上与模板参数无关T

#include <iostream>

int main()
{
    auto lambda = []<class T>(int v) -> void
    {
        std::cout << typeid(T).name() << ' ' << static_cast<T>(v) << '\n';
    };

    // How do I cast lambda to a function pointer that uses operator(int)<char>
    // This doesn't compile, I've reached this conclusion after examining this page https://en.cppreference.com/w/cpp/language/lambda
    auto seeked_ptr_char = lambda.operator fptr_t<char>();

    // Hacky solution :(
    auto mptr_char = &decltype(lambda)::operator()<char>;
    decltype(mptr_char) mptr_float = &decltype(lambda)::operator()<float>; …
Run Code Online (Sandbox Code Playgroud)

c++ lambda

3
推荐指数
1
解决办法
183
查看次数