小编tim*_*014的帖子

C++:为什么这个constexpr不是编译时常量

在下面的C++ 11代码中,对arraySize的最后一次调用会导致编译错误.显然这是因为y是运行时大小的数组,并且不能推导出y的arraySize模板参数N. 我不明白为什么x是一个编译时大小的数组,但y结束了运行时大小.arraySize模板函数直接取自Scott Meyers的"Effective Modern C++"第1项.

#include <cstddef>

template<typename T, std::size_t N>
constexpr std::size_t arraySize(T(&)[N]) noexcept { return N; }

struct S
{
    char c[10];
};

int main()
{
    S s;
    S* ps = &s;

    char x[arraySize(s.c)];
    char y[arraySize(ps->c)]; // why is y a runtime sized array?

    arraySize(x);
    arraySize(y); // error !?

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

templates constexpr c++11

10
推荐指数
1
解决办法
1215
查看次数

C++模板函数选择

template<typename TA, typename TB>
void foo (TA a, TB b); // #1

template<typename T>
void foo (T a, T b); // #2

int a, b;    
foo(a, b);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,调用foo#2.为什么?

c++ templates

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

标签 统计

templates ×2

c++ ×1

c++11 ×1

constexpr ×1