相关疑难解决方法(0)

使用大括号初始化标量

在C和C++中,可以使用大括号初始化数组和结构:

int a[] = {2, 3, 5, 7};
entry e = {"answer", 42};
Run Code Online (Sandbox Code Playgroud)

然而,在2007年的一次演讲中,Bjarne提到这种语法也适用于标量.我尝试过这个:

int i = {7};
Run Code Online (Sandbox Code Playgroud)

它确实有效!允许使用大括号初始化标量的原理是什么?

注意:我特别不是在谈论C++ 11统一初始化.这是很好的旧C89和C++ 98.

c c++ initialization language-lawyer list-initialization

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

在C中,数组初始化只有一个特殊处理的元素?

在阅读这个问题时,我想测试GCC中的输入,看看会输出什么错误.令我惊讶的是以下一行:

char array[] = {"s"};
Run Code Online (Sandbox Code Playgroud)

编译时没有错误或警告,导致包含大小为2的数组"s\0".我原本期望编译器错误,因为表达式的右侧是类型char*[].

在这种情况下,数组初始化只有一个元素不被视为数组,为什么?

c arrays

8
推荐指数
1
解决办法
1407
查看次数

可以直接初始化vector <string*>而不用new吗?

我正在学习C++ /通用编程,有时在为旧标准编写练习时尝试使用C++ 11功能.

此练习涉及指向字符串的指针向量.

#include <vector>
#include <string>
#include <iostream>
int main()
{
    using std::string ;
    using std::vector ;
    using std::cout ;
    using std::endl ;

    vector<string *> v = {new string("Hello") , new string("World")} ;
    for (string * x : v) {
        cout << *x << " " ;
        delete x ;
    }
    cout << endl ;
}
Run Code Online (Sandbox Code Playgroud)

我有点困难,想知道如何使用这个向量的初始化列表,但这似乎工作.

这个版本也有效:

    //...
    string s1 = "Hello" ;
    string s2 = "World" ;
    vector<string *> v = {&s1 , &s2} ;
    for …
Run Code Online (Sandbox Code Playgroud)

c++ pointers vector

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