小编xml*_*lmx的帖子

什么是C++ 11中的"成员初始化程序"?

我遇到了一个名为"member initializer"的奇怪概念.

这里说:

C++ 11添加了成员​​初始化器,如果构造函数没有初始化成员本身,则表达式将应用于类范围内的成员.

它的定义是什么?

是否有一些例子来说明它的用法?

c++ class member-initialization c++11

13
推荐指数
2
解决办法
5751
查看次数

临时对象的数据成员是C++ 11中的xvalue吗?

#include <vector>

using namespace std;

struct A
{
    vector<int> coll;
};

void f(const vector<int>&){}
void f(vector<int>&&){}

int main()
{
    f(A().coll); // Is "A().coll" an xvalue? 
}
Run Code Online (Sandbox Code Playgroud)

C++ 11保证f(A().coll)会打电话void f(vector<int>&&)吗?

c++ rvalue rvalue-reference move-semantics c++11

13
推荐指数
1
解决办法
359
查看次数

如何在C++中绑定构造函数?

无需过度解释.以下代码不言而喻:

struct X
{
    X(int n){}
};

int main()
{
    std::vector<int> src;
    std::vector<X>   dest;

    // Below is not valid in current C++, but that is just what I want.
    transform(src.begin(), src.end(), back_insert(dest), std::bind(&X::X, _1)); 
}
Run Code Online (Sandbox Code Playgroud)

构造函数接受一些参数并返回构造函数的类的对象.

构造函数看起来像一个函数,就像一个函数,并且只是一个函数.

所以,我认为std :: bind应该统一处理构造函数和其他可调用对象.

但是,如何扩展功能模板"bind"来实现呢?

c++ constructor bind

12
推荐指数
2
解决办法
5820
查看次数

为什么字符串文字只能在某些情况下隐式转换为char*?

void f(char* p)
{}

int main()
{
    f("Hello"); // OK

    auto p = "Hello";

    f(p); // error C2664: 'void f(char *)' : cannot convert parameter 1 
          // from 'const char *' to 'char *'
} 
Run Code Online (Sandbox Code Playgroud)

该代码是使用VC++ 2012年11月的CTP编译的.

§2.14.15字符串文字,第7节

窄字符串文字具有类型"n const char数组",其中n是下面定义的字符串的大小,并且具有静态存储持续时间.

为什么f("Hello")好吗?

c c++ type-conversion string-literals implicit-conversion

12
推荐指数
3
解决办法
1245
查看次数

在C++ 11中,"new int [8]()"等同于"new int [8] {}"吗?

new int[8]()等同于new int[8]{}在C++ 11?

换一种说法:

C++ 11标准是否保证每个new int[8]()new int[8]{}返回零初始化数组?

c++ standards constructor c++11 list-initialization

12
推荐指数
1
解决办法
531
查看次数

为什么在编译时无法获得模板函数的参数计数?

#include <cstddef>

template<typename... Types>
constexpr std::size_t getArgCount(Types&&...) noexcept
{
    return sizeof...(Types);
}

struct A
{
    int n;

    void f()
    {
        static_assert(getArgCount(n) > 0); // not ok, why?
    }
};

int main()
{
    int n;
    static_assert(getArgCount(n) > 0); // ok
}
Run Code Online (Sandbox Code Playgroud)

为什么在编译时无法获得模板函数的参数计数?

错误信息:

1>test.cpp
1>test.cpp(17,45): error C2131:  expression did not evaluate to a constant
1>test.cpp(17,42): message :  failure was caused by a read of a variable outside its lifetime
1>test.cpp(17,42): message :  see usage of 'this'
Run Code Online (Sandbox Code Playgroud)

c++ static-assert language-lawyer constexpr c++11

12
推荐指数
1
解决办法
271
查看次数

为什么 C++20 的要求表达式的行为不符合预期?

#include <type_traits>

template<typename T>
struct IsComplete final
    : std::bool_constant<requires{sizeof(T);}>
{};

int main()
{
    struct A;
    static_assert(!IsComplete<A>::value); // ok

    struct A{};
    static_assert(IsComplete<A>::value);  // error
}
Run Code Online (Sandbox Code Playgroud)

我预计第二个static_assert应该是真的,因为 A 现在是一个完整的类型。

为什么 C++20 的要求表达式的行为不符合预期?

c++ templates sfinae type-traits c++20

12
推荐指数
1
解决办法
745
查看次数

任何类型的数组总是聚合吗?

class A 
{
public:
    A(){}

private:
    int i;
};

A a[8];
Run Code Online (Sandbox Code Playgroud)

C++ 11标准8.5.1.1说:

"聚合是一个数组或类(第9条),没有用户提供的构造函数(12.1),非静态数据成员(9.2)没有大括号或相等的初始化,没有私有或受保护的非静态数据成员(子句) 11),没有基类(第10条),也没有虚函数(10.3)."

作为一个数组,是一个聚合?我想不是,但标准是肯定的.

c++ arrays standards aggregate c++11

11
推荐指数
1
解决办法
128
查看次数

一个未命名的函数参数可以有一个默认值吗?

以下代码在C++中是否合法?

void f(void* = 0)
{}

int main()
{
    f();
}
Run Code Online (Sandbox Code Playgroud)

C++标准的哪一页说明这种用法是合法的?

c++ function default-parameters function-signature c++11

11
推荐指数
2
解决办法
2000
查看次数

C++是否允许将任何整数文字隐式转换为short int?

int main()
{
    short n1 = 8ll; // no warning

    // warning C4305: 'initializing': truncation from '__int64' to 'short'
    // warning C4309: 'initializing': truncation of constant value
    short n2 = 88888ll;
}
Run Code Online (Sandbox Code Playgroud)

我的编译器是Visual Studio 2017.

根据cppref:

整数文字的类型是值可以适合的第一种类型,从类型列表中取决于使用哪个数字基数和哪个整数后缀.

带后缀的整数文字ll应为long long int; 所以short n1 = 8ll应该触发像short n2 = 88888ll这样的警告.

如果C++ short int足够小,C++是否允许将任何整数文字隐式转换为a ?

c++ integer type-conversion literals integer-promotion

11
推荐指数
1
解决办法
1365
查看次数