Bash quoted array exapansion giving unxpected results

I have a shell script

#!/bin/bash    
declare -a myargs=(1 2 "3 4")
printf "'%s' " "${myargs[@]}"

which prints

'1' '2' '3 4' (expected result)

However when I move 1 2 "3 4" in to a variable like

#!/bin/bash
cmd='1 2 "3 4"'
declare -a myargs=($cmd)
printf "'%s' " "${myargs[@]}"

prints

'1' '2' '"3' '4"'

i.e. array now has

arr[0]=1
arr[1]=2
arr[2]="3
arr[3]=4"

which is unexpected. Can anybody tell, where am I going wrong ?