相关疑难解决方法(0)

有人可以解释这个模板代码,它给我一个数组的大小?

template<typename T, size_t n>
size_t array_size(const T (&)[n])
{
    return n;
}
Run Code Online (Sandbox Code Playgroud)

我没有得到的部分是这个模板函数的参数.当我通过数组时,数组会发生什么,它给出n了数组中元素的数量?

c++ arrays size templates

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

函数模板中的魔术参数

在以下代码中

#include<iostream>

 template<typename T,size_t N> 
 void cal_size(T (&a)[N])
 { 
     std::cout<<"size of array is: "<<N<<std::endl;
 }

 int main()
 {
     int a[]={1,2,3,4,5,6};
     int b[]={1};

     cal_size(a);
     cal_size(b);
 }
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,两个阵列的大小都被打印出来.但是N如何自动初始化为数组大小的正确值(数组是通过引用传递的)?上面的代码是如何工作的?

c++ templates

21
推荐指数
2
解决办法
2907
查看次数

如何在C中找到"char*"数组的长度?

我声明了以下数组:

char* array [2] = { "One", "Two"};
Run Code Online (Sandbox Code Playgroud)

我将此数组传递给函数.如何在函数中找到此数组的长度?

c c++

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

如何传递临时数组?

我怎样才能传递临时数组?我想做这样的事情:

#include <iostream>

int sum(int arr[]) {
    int answer = 0;
    for (const auto& i : arr) {
        answer += i;
    }
    return answer;
}

int main() {
    std::cout << sum( {4, 2} ) << std::endl;       // error
    std::cout << sum( int[]{4, 2} ) << std::endl;  // error
}
Run Code Online (Sandbox Code Playgroud)

我在函数参数的括号中是否需要正整数文字[]?如果我包含该文字,它会限制我可以传递给那个大小的数组的数组吗?另外,如何通过rvalue引用或const引用传递数组元素?因为上面的示例没有编译,我认为制作函数的参数类型int&&[]const int&[]不起作用.

c++ arrays reference temporary parameter-passing

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

代码中奇怪的constexpr参数

我试图理解代码:

#include <iostream>
#include <stdexcept>

// constexpr functions use recursion rather than iteration
constexpr int factorial(int n)
{
    return n <= 1 ? 1 : (n * factorial(n-1));
}

// literal class
class conststr {
    const char * p;
    std::size_t sz;
 public:
    template<std::size_t N>
    constexpr conststr(const char(&a)[N]) : p(a), sz(N-1) {}
    // constexpr functions signal errors by throwing exceptions from operator ?:
    constexpr char operator[](std::size_t n) const {
        return n < sz ? p[n] : throw std::out_of_range("");
    }
    constexpr std::size_t …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

使用模板获取数组的大小和结束地址

您可以使用模板查找数组的长度.

template<typename T, size_t N>
size_t arraylen( T(&)[N] )
{ return N; }
Run Code Online (Sandbox Code Playgroud)

我想把这个想法更进一步.

struct Foo
{
   template< typename T, size_t N >
   Foo( /* ??? */ ) : ptr(?), size(?) { }

   char* ptr;
   size_t size;
};

int main()
{
   Foo foo("test");

   const char bar[] = "test2";
   Foo foo2(bar);

   const char* baz = bar;
   Foo foo3(baz); // compiler error.
}
Run Code Online (Sandbox Code Playgroud)

但是,对于我的生活,我无法获得编译的语法.我认为我缺少的一部分是我真的不明白这T(&)[N]意味着什么.

什么T(&)[N]意思?

如何在仍然使用模板获取其大小的同时允许访问数组的地址?

c++ templates metaprogramming

2
推荐指数
1
解决办法
1678
查看次数