相关疑难解决方法(0)

表达与陈述

我问的是关于c#,但我认为它在大多数其他语言中都是一样的.

有没有人对表达式语句有一个很好的定义,有什么区别?

c# language-features expression

425
推荐指数
10
解决办法
6万
查看次数

C逗号运算符的使用

你看到它用于for循环语句,但它在任何地方都是合法的语法.您在其他地方找到了什么用途,如果有的话?

c c++ comma-operator

88
推荐指数
10
解决办法
2万
查看次数

为什么在C++ 11中删除了对逗号运算符的限制在常量表达式中删除了?

最近在回答问题时,我意识到只要表达式被包围,逗号运算符就被允许在C++ 11中的常量表达式中(),例如:

int a[ (1, 2) ] ;
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,禁止在常量表达式中使用逗号运算符,来自草案预C++ 11标准部分5.19 常量表达式(强调我的):

[...]特别是,除了sizeof表达式,不应使用函数,类对象,指针或引用,并且不得使用赋值,递增,递减,函数调用或逗号运算符.

为什么逗号运算符不允许在C++ 11之前的常量表达式中,为什么解除了这个限制?

c++ language-lawyer constant-expression c++11 c++03

20
推荐指数
1
解决办法
755
查看次数

如何检查类型是否存在无参数运算符()

我正在尝试检查仿函数是否与给定的一组参数类型和给定的返回类型兼容(也就是说,给定的参数类型可以被隐含地转换为实际的参数类型,反之亦然的是返回类型).目前我使用以下代码:

    template<typename T, typename R, template<typename U, typename V> class Comparer>
    struct check_type
    { enum {value = Comparer<T, R>::value}; };

    template<typename T, typename Return, typename... Args>
    struct is_functor_compatible
    {
        struct base: public T
        {
            using T::operator();
            std::false_type operator()(...)const;
        };
        enum {value = check_type<decltype(std::declval<base>()(std::declval<Args>()...)), Return, std::is_convertible>::value};
    };
Run Code Online (Sandbox Code Playgroud)

check_type<T, V, Comparer> 这在大多数情况下非常struct foo{ int operator()() const;};好用,但是当我测试无参数仿函数时,它无法编译,因为在这种情况下,两个operator()基数显然是暧昧的,导致类似这样的事情:

error: call of '(is_functor_compatible<foo, void>::base) ()' is ambiguous
note: candidates are:
note: std::false_type is_functor_compatible<T, Return, Args>::base::operator()(...) const [with T = foo, Return …
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming c++11

7
推荐指数
1
解决办法
377
查看次数

下标运算符中的逗号运算符?

我对逗号运算符很困惑。我从来没有见过这样的语法这样的代码?但我很好奇它是否在任何地方有用?为什么它在 c++20 中被弃用?

#include <iostream>
int main()
{
    int  a[5]{1,2,3,45,5};
    std::cout << a[(2,3)] <<'\n';  //  this is work , in c++17 works
    std::cout << a[2,3] << '\n';   // but this is deprecated in c++20 ,in c++17 works
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ c++17 c++20

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