int main(){
decltype(auto)&& a = 100;
}
以上代码,是GCC和Clang中的一个错误。
int main(){
decltype(int)&& a = 100;
}
这个代码是正确的。
在N4296中,
第8.3.2/6节
如果ty胡枝子(7.1.3)、类型模板参数(14.3.1)或解密类型说明符(7.1.6.2)表示引用类型T的类型TR,则试图创建类型“lvalue引用cv”的尝试会创建类型“lvalue引用T”,而尝试创建类型“rvalue引用cv”则会创建类型TR。
第7.1.6.2节中的解密型
我有点不明白为什么带逗号运算符的decltype在某些情况下返回引用类型。
例如,在此代码中:
int i = 101;
decltype(1, i) var = i;
var = 20;
printf("%d\n", i); // will print 20
在这里,var是int&而不是int,但是如果我将第二行替换为:
decltype(i) var = i;
它会回来的!
有人能解释一下吗?
所以我有一个类,它接受两个模板参数,一个是类型,一个是使用函数的类型,它有一个约简函数重复应用到数组中。但是,我得到了一个编译错误。
function_template_test.cpp: In instantiation of 'class _C<int, int(int, int)>':
function_template_test.cpp:36:33: required from here
function_template_test.cpp:11:17: error: field '_C<int, int(int, int)>::op
情况是这样的:
{
MyStruct * foo;
// works perfectly! When I change MyStruct to MyOtherStruct then
// I do not have to change the sizeof expression.
foo = (MyStruct *) malloc(sizeof(decltype(*foo)));
// The cast has to be adapted.
}
对于强制转换的(MyStruct *),我如何实现这个通用语法?我试了很多次,但没有运气。
使用C++11
更新:,根据
我有以下代码:
template<auto... args> struct Custom
{
};
int main()
{
Custom<1, nullptr> s; // i want this to succeed only when all the template arguments are of the same type
}
从上面的代码可以看出,我可以传递不同类型的模板参数。我的问题是,是否有一种方法只接受相同类型的模板参数。这意味着,main中的语句应该失败,并且只在所有模板参数都是相同类型时才能工作。实质上,有两项要求:
对于少于
如果我从第三方代码中得到以下代码:
template <typename T>
class MemberType
{
public:
using const_ptr = const T*;
};
struct SchemaA
{
MemberType<int> *m_1;
MemberType<double> *m_2;
// more data members that I don't care for
MemberType<double> *m_3;
MemberType<do
我想测试一个变量类型的属性。我可以,但是代码太冗长了。
考虑一个示例,其中我定义了一个与容器中值的类型相同的变量:
#include <vector>
int main() {
std::vector<int> v, &rv=v;
// ‘rv’ is not a class, namespace, or enumeration
//rv::value_type i1;
// Ok
decltype(v)::value_type i2;
// decltype evaluates to ‘std::vector<int>
我试图通过一个堆栈溢出问题( C++ )来理解中的解密类型。
已被接受的部分答案如下。
int foo();
int n = 10;
decltype(n) a = 20; // a is an "int" [id-expression]
decltype((n)) b = a; // b is an "int &" [(n) is an lvalue]
decltype(foo()) c = foo(); // c is an "int" [rvalue]
decltype
我有个练习:
auto p = 42;
auto const& q = p;
auto r = q;
auto& s = q;
r和s的类型是什么?
这是我的答案,但我不太确定:
auto p = 42; // int
auto const& q = p; // const int&
auto r = q; // int&
auto& s = q; // int&&
假设我有这样一门课:
struct MyStruct
{
template<typename T>
static int Func()
{
// Do something with the template parameter.
}
};
现在假设我想用Func的prototype创建指向函数的指针向量。由于原型不依赖于模板参数,所以应该是可能的。而且,果然,我可以显式地typedef一个指向Func的指针,如下所示:
typedef int (* FuncPtr)(MyStruct * pointer);
然后,创建向量就像:
st
以下代码是用VC++ Nov 2012 CTP编译的。但是编译器给出了一个警告。
我只是想知道这是不是VC++ 2012年11月CTP的一个bug。
struct A
{
int n;
A(int n)
: n(n)
{}
int Get() const
{
return n;
}
int Get()
{
//
// If using "static_cast<const A&>(*this).Get();" instead,