0

考虑代码:

#include <iostream>
#include <vector>
#include <string>

int main()
{
    std::vector<std::string> v{{"awe", "kjh"}}; // not v{"awe", "kjh"}

    std::cout << v.size() << std::endl;

    return 0;
}
  1. 这段代码是错误的吗?或者{}在初始化向量时使用 double 是否有效?

  2. 我在 gcc 和 MSVC 上尝试了这段代码。MSVC 2012 + 编译器 Nov 2012 只是无法编译它,这并不奇怪。使用 gcc 4.7 或 4.8 编译的这段代码在程序执行期间会出现运行时错误。这种行为正确吗?

不幸的是,无法使用其他编译器对其进行测试。

4

2 回答 2

3

请注意,您的初始化等效于:

std::vector<std::string> v{std::string{"awe", "kjh"}}; 
// not: std::vector<std::string> v{std::string{"awe"}, std::string{"kjh"}};

标准不需要这种类型实现的构造函数std::string,因此基于特定的 STD 实现,我猜代码可以做不同的事情。

问候, &rzej

于 2013-06-10T15:47:15.393 回答
1

内部{}被视为 std::string 构造函数。如果您只是这样做,它将在运行时失败

std::string> s{"awe", "kjh"};
于 2013-06-10T15:45:28.400 回答