C++11 初始化器_列表错误

问题描述 投票:0回答:2

考虑代码:

#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 + complier Nov 2012 无法编译它,这并不奇怪。 使用 gcc 4.7 或 4.8 编译的这段代码在程序执行期间会出现“运行时错误”。这种行为正确吗?

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

c++ c++11 initializer-list
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


1
投票
{}

被视为 std::string 构造函数。 如果你这样做的话,它会在运行时失败

std::string> s{"awe", "kjh"};

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.